Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/08/2011, 12:34
Avatar de Patriarka
Patriarka
 
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 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.