En el mundo del internet realizar una marca de agua es la única forma de proteger una imagen que sea de nuestra propiedad y sea utilizada por otras personas. Para esto agregamos la marca de agua a todas nuestras imágenes, alguno de los beneficios de colocar una marca de agua a las imágenes es crear un público que reconozca el trabajo realizado.
En este tutorial les voy a mostrar como subir una imagen desde un formulario guardar los datos en una base de datos y mostrar la imagen subida.
En este ejemplo vamos a utilizar la librería GD de PHP que nos proporciona una forma muy sencilla de agregar una marca de agua a nuestras imágenes, la librería GD utiliza los canales alfa para poder agregar la imagen.
Es muy importante saber que para crear una marca de agua con PHP debemos trabajar con 2 imágenes, una es la que cargaremos a través del formulario y otra es la que se va a encontrar en el servidor esperando ser colocado como marca de agua.
A continuación les dejo el script en funcionamiento para crear una marca de agua
<?php $connect = new PDO("mysql:host=localhost;dbname=testing", "root", ""); $message = ''; if(isset($_POST["upload"])) { if(!empty($_FILES["select_image"]["name"])) { $extension = pathinfo($_FILES["select_image"]["name"],PATHINFO_EXTENSION); $allow_extension = array('jpg','png','jpeg'); $file_name = uniqid() . '.' . $extension; $upload_location = 'upload/' . $file_name; if(in_array($extension, $allow_extension)) { $image_size = $_FILES["select_image"]["size"]; if($image_size < 2 * 1024 * 1024) { if(move_uploaded_file($_FILES["select_image"]["tmp_name"], $upload_location)) { //Aqui colocamos la marca de agua $watermark_image = imagecreatefrompng('round-logo.png'); if($extension == 'jpg' || $extension == 'jpeg') { $image = imagecreatefromjpeg($upload_location); } if($extension == 'png') { $image = imagecreatefrompng($upload_location); } $margin_right = 10; $margin_bottom = 10; $watermark_image_width = imagesx($watermark_image); $watermark_image_height = imagesy($watermark_image); imagecopy($image, $watermark_image, imagesx($image) - $watermark_image_width - $margin_right, imagesy($image) - $watermark_image_height - $margin_bottom, 0, 0, $watermark_image_width, $watermark_image_height); imagepng($image, $upload_location); imagedestroy($image); if(file_exists($upload_location)) { $message = "Imagen subida y agregada la marca de agua"; $data = array( ':image_name' => $file_name ); $query = " INSERT INTO images_table (image_name, upload_datetime) VALUES (:image_name, now()) "; $statement = $connect->prepare($query); $statement->execute($data); } else { $message = "Ocurerio un error intenta de nuevo"; } } else { $message = "Ocurrio un error intenta de nuevo"; } } else { $message = "La imagen es muy grande"; } } else { $message = 'Solo estos formatos de imagenes estan permitidos .jpg, .png and .jpeg'; } } else { $message = 'Por favor selecciona una imagen'; } } $query = " SELECT * FROM images_table ORDER BY image_id DESC "; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); ?> <!DOCTYPE html> <html> <head> <title>Agregar marca de agua webdebe.xyz</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" /> </head> <body> <br /> <div class="container"> <h3 align="center">Agregar marcas de agua webdebe.xyz</h3> <br /> <?php if($message != '') { echo ' <div class="alert alert-info"> '.$message.' </div> '; } ?> <div class="panel panel-default"> <div class="panel-heading">Agregar Marca de agua</div> <div class="panel-body"> <form method="post" enctype="multipart/form-data"> <div class="row"> <div class="form-group"> <label class="col-md-6" align="right">Selecciona la imagen</label> <div class="col-md-6"> <input type="file" name="select_image" /> </div> </div> </div> <br /> <div class="form-group" align="center"> <input type="submit" name="upload" class="btn btn-primary" value="Upload" /> </div> </form> </div> </div> <div class="panel panel-default"> <div class="panel-heading">Imagenes subidas con marca de agua</div> <div class="panel-body" style="height: 700px;overflow-y: auto;"> <div class="row"> <?php foreach($result as $row) { echo ' <div class="col-md-2" style="margin-bottom:16px;"> <img src="upload/'.$row["image_name"].'" class="img-responsive img-thumbnail" /> </div> '; } ?> </div> </div> </div> </div> </body> </html>
Aqui dejo la base de datos para que funcione correctamente
-- -- Database: `testing` -- -- -------------------------------------------------------- -- -- Table structure for table `images_table` -- CREATE TABLE `images_table` ( `image_id` int(11) NOT NULL, `image_name` varchar(250) NOT NULL, `upload_datetime` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `images_table` -- ALTER TABLE `images_table` ADD PRIMARY KEY (`image_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `images_table` -- ALTER TABLE `images_table` MODIFY `image_id` int(11) NOT NULL AUTO_INCREMENT;