Nueva pregunta

Pregunta:

Fecha: 23-11-2020 15:34:04 (En Español)

¿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>";
 }
}

?>
Etiquetas: Editor de Texto Enriquecido - PHP - Pregunta - Subir Archivos (Upload) 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 05:07:20 No veo el imagecopymerge... ¿lo probaste?   Votos: 1 - 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
 
frjcbbae garagebible.com