Foros del Web » Programando para Internet » PHP »

marca de agua

Estas en el tema de marca de agua en el foro de PHP en Foros del Web. Hola Gente estoy generando una imagen con marca de agua, el problema me surge de que al usar la funcion imagecopy http://php.net/manual/es/function.imagecopy.php hago esto: $dest_x ...
  #1 (permalink)  
Antiguo 18/08/2011, 07:23
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
marca de agua

Hola Gente estoy generando una imagen con marca de agua,
el problema me surge de que al usar la funcion imagecopy http://php.net/manual/es/function.imagecopy.php
hago esto:

$dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 ); $dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 );

imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0, $watermarkfile_width, $watermarkfile_height);

y me crea la imagen con la marca de agua centrada, perfecto...
pero la marca de agua no ocupa el 100% x 100% del alto y ancho de la imagen creada, y sin por algun caso la marca de agua es mas grande que la imagen original queda fea.

cualquier ayuda es bienvenida
  #2 (permalink)  
Antiguo 18/08/2011, 10:47
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: marca de agua

Estas redimensionando la marca de agua o solamente la imagen creada? Debes tambien redimensionar la marca de agua dependiendo del alto y/o ancho de la imagen
  #3 (permalink)  
Antiguo 18/08/2011, 12:34
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: marca de agua

Hola RonRuby, gracias por tu ayuda, la verdad es que las funciones de imagenes llevan muchos parametros y no estoy seguro cuales son lo que tengo que modificar
te muestro lo que tengo hecho
Código PHP:
Ver original
  1. /*
  2.         * CREO LA IMAGEN CON MARCA DE AGUA A PARTIR DE LA NUEVA IMAGEN EL PRODUCTO
  3.         */
  4. <?php
  5.        $destino= $Product->getId()."_water_mark.png"; // donde se guarda la copia con marca de agua
  6.        $image= $image->getImageFileName(); // a esta imagen le agrego la marca de agua
  7.        $watermark = "/water_mark/marca_original.png";
  8.        $im = imagecreatefrompng($watermark);
  9.        $ext = substr($image, -3);
  10.  
  11.        if(strtolower($ext) == "gif") {
  12.           if (!$im2 = imagecreatefromgif($image)) {
  13.              echo "Error opening GIF $image!";
  14.           }
  15.        } else if(strtolower($ext) == "peg" || strtolower($ext) == "jpg") {
  16.           if (!$im2 = imagecreatefromjpeg($image)) {
  17.              echo "Error opening JPG $image!";
  18.           }
  19.        } else if(strtolower($ext) == "png") {
  20.           if (!$im2 = imagecreatefrompng($image)) {
  21.              echo "Error opening PNG $image!";
  22.           }
  23.        } else { echo ' die'; die; }
  24.        imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
  25.        $batch = array(
  26.                   array(
  27.                        'filename' => $watermark,
  28.                        'position' => array(0,0),
  29.                       )
  30.                   );
  31.        $my_water_mark=watermark($image, $batch, $destino , 50); //will add both images in bath on top of picture, preserving transparency
?>
luego la funcion watermark
Código PHP:
Ver original
  1. .
  2. <?php
  3.  
  4. function watermark($sourcefile, $watermarkfiles, $destination, $quality=90) {
  5.  
  6.     $ih = getimagesize($sourcefile);
  7.     $ispng = $ih[2] == 3;
  8.     if ($ispng)
  9.        $sourcefile_id = imagecreatefrompng($sourcefile);
  10.     else
  11.        $sourcefile_id = imagecreatefromjpeg($sourcefile);
  12.        /*
  13.         * FIXME: CREATE GIF
  14.         */
  15.     $sourcefile_width=imageSX($sourcefile_id);
  16.     $sourcefile_height=imageSY($sourcefile_id);
  17.     foreach ($watermarkfiles as $x => $watermarkfile) {
  18.        $watermarkfile_id = imagecreatefrompng($watermarkfile['filename']);
  19.        imageAlphaBlending($watermarkfile_id, false);
  20.        imageSaveAlpha($watermarkfile_id, true);
  21.        $watermarkfile_width=imageSX($watermarkfile_id);
  22.        $watermarkfile_height=imageSY($watermarkfile_id);
  23.  
  24.     // resample?
  25.        if (isset($watermarkfile['resample'])) {
  26.           $im_dest = imagecreatetruecolor ($watermarkfile['resample'][0], $watermarkfile['resample'][1]);
  27.           imagealphablending($im_dest, false);
  28.           imagecopyresampled($im_dest, $watermarkfile_id, 0, 0, 0, 0, $watermarkfile['resample'][0], $watermarkfile['resample'][1], $watermarkfile_width, $watermarkfile_height);
  29.           imagesavealpha($im_dest, true);
  30.           imagedestroy($watermarkfile_id);
  31.           $watermarkfile_id = $im_dest;
  32.           $watermarkfile_width = $watermarkfile['resample'][0];
  33.           $watermarkfile_height = $watermarkfile['resample'][1];
  34.        }
  35.  
  36.        // position ? if none given, centered
  37.        if (!isset($watermarkfile['position'])){
  38.           list($dest_x,$dest_y) = $watermarkfile['position'];
  39.        }else {
  40.           $dest_x = ( $sourcefile_width / 2 ) - ( $watermarkfile_width / 2 ); // centered
  41.           $dest_y = ( $sourcefile_height / 2 ) - ( $watermarkfile_height / 2 ); // centered
  42.  
  43.        }
  44.        echo $sourcefile_id.' | '.$watermarkfile_id.' | '.$dest_x.' | '.$dest_y.' | 0 | 0 |'.$watermarkfile_width.' | '.$watermarkfile_height;
  45.        imagecopy($sourcefile_id, $watermarkfile_id, $dest_x, $dest_y, 0, 0, $watermarkfile_width, $watermarkfile_height);
  46.        imagedestroy($watermarkfile_id);
  47.     }
  48.     if ($ispng){
  49.        imagepng($sourcefile_id,$destination);
  50.     }else{
  51.        imagejpeg($sourcefile_id,$destination,$quality);
  52.     }
  53.     imagedestroy($sourcefile_id);
  54.     return $destination;
  55. }
  56. ?>

esto funciona perfecto: me crea una imagen con la marca apartir de una imagen subida por el usuario y y una imagen con marca de agua fija. La marca de agua aparece centrada pero no ocupa 100% x 100% del alto y ancho.

Etiquetas: agua, marca
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:32.