Pregunta:
Fecha: 23-11-2020 15:34:04
(En Español)
El script funciona a la perfección, el tema es que no se como puedo agregar una marca de agua a la imagen generada antes de enviarla el servidor, alguien me podría ayudar, gracias.
¿Cómo agrego una marca de agua o watermark a este script, para enviar una imagen al servidor mediante ckeditor?[No resuelta]
Hice este script que inserta una imagen mediante ckeditor, con el plugin image2 (Enhanced Image Plugin)El script funciona a la perfección, el tema es que no se como puedo agregar una marca de agua a la imagen generada antes de enviarla el servidor, alguien me podría ayudar, gracias.
<?php //upload.php if(isset($_FILES['upload']['name'])) { $nueva = $_FILES["upload"]["tmp_name"]; $anchomaximo = 400; $altomaximo = 400; //Extraigo los atributos ancho y alto de la imagen original list($ancho, $alto) = getimagesize($nueva); //Calculamos el ancho y alto propocional de //la imagen redimensionada $anchoproporcional = $anchomaximo / $ancho; $altoproporcional = $altomaximo / $alto; //En caso de que el ancho y el alto estan dentro, //de los maximos permitidos, los mantenemos if( ($ancho <= $anchomaximo) && ($alto <= $altomaximo) ){ $anchonuevo = $ancho; $altonuevo = $alto; } //Si el alto es mayor que el ancho //calculamos un alto proporcional al maximo permitido elseif (($anchoproporcional * $alto) < $altomaximo){ $altonuevo = ceil($anchoproporcional * $alto); $anchonuevo = $anchomaximo; } //Si el ancho es mayor que el alto //calculamos un ancho proporcional al maximo permitido else{ $anchonuevo = ceil($altoproporcional * $ancho); $altonuevo = $altomaximo; } //Redimensionar $imagen_p = imagecreatetruecolor($anchonuevo, $altonuevo); $imagen = imagecreatefromstring(file_get_contents($nueva)); //$imagen = imagecreatefromjpeg($nueva); imagecopyresampled($imagen_p, $imagen, 0, 0, 0, 0, $anchonuevo, $altonuevo, $ancho, $alto); /* Sobreescribimos la imagen original con la reescalada */ imagejpeg($imagen_p, $nueva); /* Actualizo el tamaño al que tiene la imagen reescalada */ $_FILES["upload"]["size"] = filesize($nueva); $file_name = $_FILES['upload']['name']; $file_name_array = explode(".", $file_name); $extension = end($file_name_array); $new_image_name = time() . '.' . $extension; chmod('../../imagenes/noticias/internas', 0777); $allowed_extension = array("jpg", "gif", "png"); if(in_array($extension, $allowed_extension)) { move_uploaded_file($nueva, '../../imagenes/noticias/internas/' . $new_image_name); $function_number = $_GET['CKEditorFuncNum']; $url = 'http://localhost/sitio/imagenes/noticias/internas/' . $new_image_name; $message = '';//https://'.$_SERVER['HTTP_HOST'].'/ echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($function_number, '$url', '$message');</script>"; } } ?>Votos: 0 - Respuestas: 8 - Vistas: 5 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 24-11-2020 04:36:58 Podés usar la función imagecopymerge.
Acá hay un ejemplo Votos: 1 - Link respuesta -
Fecha: 24-11-2020 08:29:51 Gracias, por la respuesta. SI ví el ejemplo, lo quise implementar pero no di con la tecla, no se como colocarlo Votos: 0 - Link respuesta
-
Fecha: 25-11-2020 04:26:55 ¿Podrías mostrar el código que intentaste y qué error te dio? Votos: 1 - Link respuesta
-
Fecha: 25-11-2020 10:41:39 Esto es lo que tengo
<?php //upload.php if(isset($_FILES['upload']['name'])) { $nueva = $_FILES["upload"]["tmp_name"]; $anchomaximo = 400; $altomaximo = 400; //Extraigo los atributos ancho y alto de la imagen original list($ancho, $alto) = getimagesize($nueva); //Calculamos el ancho y alto propocional de //la imagen redimensionada $anchoproporcional = $anchomaximo / $ancho; $altoproporcional = $altomaximo / $alto; //En caso de que el ancho y el alto estan dentro, //de los maximos permitidos, los mantenemos if( ($ancho <= $anchomaximo) && ($alto <= $altomaximo) ){ $anchonuevo = $ancho; $altonuevo = $alto; } //Si el alto es mayor que el ancho //calculamos un alto proporcional al maximo permitido elseif (($anchoproporcional * $alto) < $altomaximo){ $altonuevo = ceil($anchoproporcional * $alto); $anchonuevo = $anchomaximo; } //Si el ancho es mayor que el alto //calculamos un ancho proporcional al maximo permitido else{ $anchonuevo = ceil($altoproporcional * $ancho); $altonuevo = $altomaximo; } //Redimensionar $imagen_p = imagecreatetruecolor($anchonuevo, $altonuevo); $imagen = imagecreatefromstring(file_get_contents($nueva)); //$imagen = imagecreatefromjpeg($nueva); imagecopyresampled($imagen_p, $imagen, 0, 0, 0, 0, $anchonuevo, $altonuevo, $ancho, $alto); /* Sobreescribimos la imagen original con la reescalada */ imagejpeg($imagen_p, $nueva); /* Actualizo el tamaño al que tiene la imagen reescalada */ $estampa = imagecreatefrompng('../../imagenes/noticias/internas/fmac.png'); $im = $_FILES["upload"]["size"] = filesize($nueva); // Cargar la estampa y la foto para aplicarle la marca de agua $estampa = imagecreatefrompng('../../imagenes/noticias/internas/fmac.png'); //$nueva = imagecreatefromjpeg('foto.jpeg'); // Establecer los márgenes para la estampa y obtener el alto/ancho de la imagen de la estampa $margen_dcho = 10; $margen_inf = 10; $sx = imagesx($estampa); $sy = imagesy($estampa); // Copiar la imagen de la estampa sobre nuestra foto usando los índices de márgen y el // ancho de la foto para calcular la posición de la estampa. imagecopy($im, $estampa, imagesx($im) - $sx - $margen_dcho, imagesy($im) - $sy - $margen_inf, 0, 0, imagesx($estampa), imagesy($estampa)); $file_name = $_FILES['upload']['name']; $file_name_array = explode(".", $file_name); $extension = end($file_name_array); $new_image_name = time() . '.' . $extension; chmod('../../imagenes/noticias/internas', 0777); $allowed_extension = array("jpg", "gif", "png"); if(in_array($extension, $allowed_extension)) { move_uploaded_file($nueva, '../../imagenes/noticias/internas/' . $new_image_name); $function_number = $_GET['CKEditorFuncNum']; $url = 'http://localhost/fmac/imagenes/noticias/internas/' . $new_image_name; $message = '';//https://'.$_SERVER['HTTP_HOST'].'/ echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($function_number, '$url', '$message');</script>"; } } ?>
Votos: 0 - Link respuesta -
-
Fecha: 26-11-2020 09:10:17 Gracias por contestar Mauro. Me gustaría que lo veas, y me des tu opinión. Bueno he solucionado el problema aquí les dejo el script completo, espero que les sirva, si se puede mejorar me gustaría que me avisen, saludos a la comunidad,
<?php //upload.php if(isset($_FILES['upload']['name'])) { $nueva = $_FILES["upload"]["tmp_name"]; //Ancho y Alto máximo que va a tener la imagen redimensionada, manteniendo sus proporciones $anchomaximo = 400; $altomaximo = 400; //Extraigo los atributos ancho y alto de la imagen original list($ancho, $alto) = getimagesize($nueva); //Calculamos el ancho y alto propocional de la imagen redimensionada $anchoproporcional = $anchomaximo / $ancho; $altoproporcional = $altomaximo / $alto; //En caso de que el ancho y el alto estan dentro, de los maximos permitidos, los mantenemos if( ($ancho <= $anchomaximo) && ($alto <= $altomaximo) ){ $anchonuevo = $ancho; $altonuevo = $alto; } //Si el alto es mayor que el ancho calculamos un alto proporcional al maximo permitido elseif (($anchoproporcional * $alto) < $altomaximo){ $altonuevo = ceil($anchoproporcional * $alto); $anchonuevo = $anchomaximo; } //Si el ancho es mayor que el alto calculamos un ancho proporcional al maximo permitido else{ $anchonuevo = ceil($altoproporcional * $ancho); $altonuevo = $altomaximo; } //Redimensionar $imagen_p = imagecreatetruecolor($anchonuevo, $altonuevo); //Marca de Agua, margen derecho e izquierdo en px $margen_dcho = 5; $margen_inf = 5; // Ruta de la Imagen de la Marca de Agua $stamp=imagecreatefrompng('../../imagenes/fmac.png'); //Establezco la posición del margen derecho e izquierdo $sx = imagesx($stamp); $sy = imagesy($stamp); //Se crea el lienzo de la imagen nueva con imagecreatefromstring para que tome el valor por defecto de la extensión de la imagen $imagen = imagecreatefromstring(file_get_contents($nueva)); //Crea la imagen redimensionada imagecopyresampled($imagen_p, $imagen, 0, 0, 0, 0, $anchonuevo, $altonuevo, $ancho, $alto); //Copio la imagen de la estampa sobre nuestra foto usando los índices de margen y el ancho de la foto para calcular la posición de la estampa. imagecopy($imagen_p,$stamp,imagesx($imagen_p) - $sx - $margen_dcho, imagesy($imagen_p) - $sy - $margen_inf, 0, 0, imagesx($stamp), imagesy($stamp)); //Creo la imagen reescalada con la marca de agua y la guardo como jpg imagejpeg($imagen_p, $nueva); // Actualizo el tamaño al que tiene la imagen reescalada $_FILES["upload"]["size"] = filesize($nueva); $file_name = $_FILES['upload']['name']; $file_name_array = explode(".", $file_name); $extension = end($file_name_array); $new_image_name = time() . '.' . $extension; chmod('../../imagenes/noticias/internas', 0777); $allowed_extension = array("jpg", "gif", "png"); if(in_array($extension, $allowed_extension)) { //Muevo la imagen a la carpeta de destino move_uploaded_file($nueva, '../../imagenes/noticias/internas/' . $new_image_name); //función que activa el la suda del archivo en el CKEditor $function_number = $_GET['CKEditorFuncNum']; //Visualiza la imagen insertada dentro del textárea del CKeditor $url = 'http://localhost/fmac/imagenes/noticias/internas/' . $new_image_name; $message = '';//Imagen Subida correctamente, si desean que le aparesca el mensaje //Imprime la url y el tamaño de la foto en el plugin de CKEditor echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($function_number, '$url', '$message');</script>"; } } ?>
Votos: 0 - Link respuesta -
Fecha: 27-11-2020 06:49:00 Bueno... no tengo mucho que decir me parece... si funciona, funciona :)
Sólo un par de comentarios:
1. Trataría de no usar paths relativos (O, en todo caso, hacerlos relativos a la constante __DIR__ por las dudas)
2. ImageMagick es muy bueno pero en general consume bastantes recursos. Si tenés que hacer este proceso muchas veces te recomiendo dedicar un servidor sólo a esto para no penalizar a tus visitantes.
Por lo demás... felicitaciones :) Votos: 1 - Link respuesta -
Fecha: 28-11-2020 12:12:28 Desde ya agradezco tu respuesta, lo voy a tener en cuenta, personalmente uso la librería GD Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión