Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[APORTE] Subir y redimensionar imagenes

Estas en el tema de [APORTE] Subir y redimensionar imagenes en el foro de Frameworks y PHP orientado a objetos en Foros del Web. La clase se encuentra en la dirección http://www.forosdelweb.com/wiki/PHP:...as_al_servidor Editado: Junio-06-2011 Añadir transparencia a los png Editado: Julio-05-2011 Añadir transparencia a los gif Editado: Julio-16-2011 Arreglar ...

  #1 (permalink)  
Antiguo 14/05/2011, 13:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
[APORTE] Subir y redimensionar imagenes

La clase se encuentra en la dirección http://www.forosdelweb.com/wiki/PHP:...as_al_servidor
Editado: Junio-06-2011 Añadir transparencia a los png
Editado: Julio-05-2011 Añadir transparencia a los gif
Editado: Julio-16-2011 Arreglar "bug" para las transparencias de los gif y añadir marca de agua
Editado: Julio-18-2011 Arreglar marca de agua de imagen y añadir marca de agua de texto
Editado: Febrero-24-2012 Añadir el método isValidExtension para corroborar si es valido la extensión a usar
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 27/02/2012 a las 12:32 Razón: Modificaciones a la clase
  #2 (permalink)  
Antiguo 14/05/2011, 19:16
Avatar de Vitesse92  
Fecha de Ingreso: diciembre-2009
Ubicación: Internet
Mensajes: 145
Antigüedad: 14 años, 11 meses
Puntos: 5
Respuesta: [APORTE] Subir y redimensionar imagenes

Super bien, que gran aporte! :)
  #3 (permalink)  
Antiguo 18/05/2011, 09:01
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

yo la uso en mi framework a esa libreria es excelente, lo único que le agregue fue un método no rezise() que mantiene el mismo tamaño de la imagen y se puede usar el método save para guardarla, medio al dope jeje, pero me servia a mi :P
  #4 (permalink)  
Antiguo 18/05/2011, 10:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

Pero en los ejemplos te muestro como subir imagenes sin cambiarle el tamaño Mira el primer ejemplo y el quinto.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 18/05/2011, 13:11
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

esto fue lo que agregue yo, y otra cosa mas que le meti fue un singleton:
Código PHP:
Ver original
  1. public function noResize() {
  2.         $new_image = imagecreatetruecolor($this->getWidth(), $this->getHeight());
  3.  
  4.         //creo la transprencia para los png y gif
  5.         if(($this->image_type == IMAGETYPE_GIF) OR ($this->image_type == IMAGETYPE_PNG)) {
  6.             imagealphablending($this->image, false);
  7.             imagesavealpha($this->image,true);
  8.             $transparent = imagecolorallocate($new_image, 255, 255, 255);//imagecolorallocatealpha($new_image, 255, 255, 255, 127);
  9.             //imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
  10.             imagefill($new_image, 0, 0, $transparent);
  11.         }
  12.  
  13.         imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $this->getWidth(), $this->getHeight(), $this->getWidth(), $this->getHeight());
  14.         $this->image = $new_image;
  15.     }
  #6 (permalink)  
Antiguo 05/06/2011, 14:02
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

abimaelrc,
como se puede hacer con esta libreria para que las imagenes con fondo transparente no se pierda, estoy subiendo unos png con fondo transparente y me las sube con fondo blanco :(
  #7 (permalink)  
Antiguo 06/06/2011, 03:23
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: [APORTE] Subir y redimensionar imagenes

Vaya, la verdad es que me ha aclarado muchas de las dudas que tenía, pero aún tengo una: donde se guarda el fichero "require_once 'ResizePicture.php';"? Es que yo tengo una clase en un fichero y no consigo arrancarlo.
  #8 (permalink)  
Antiguo 06/06/2011, 05:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

@destor77, trata con http://www.php.net/manual/en/functio...ransparent.php o mira este tema http://stackoverflow.com/questions/2...-in-php#279310

@Saneko, donde quieras colocarlo, solo que necesitas hacer include o require de acuerdo a donde lo hayas hecho. Si tienes alguna duda te recomiendo que lo coloques en otro tema, para que no se pierda el foco de este tema
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 06/06/2011, 05:48
 
Fecha de Ingreso: marzo-2011
Mensajes: 107
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: [APORTE] Subir y redimensionar imagenes

Gracias abimaelrc, otra cosa, relacionada con este aporte, si quisiera guardar la/s imagen/es en otra ruta solo tengo que cambiar esta línea?

Código PHP:
$original './ruta/original_' $_FILES['image']['name']; 
  #10 (permalink)  
Antiguo 06/06/2011, 06:31
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

@Saneko, eso es correcto

@destor77, hice cambio a la clase, ahora se pueden subir archivos png con transparencia. Mira el sexto ejemplo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 07/06/2011, 08:12
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

buenisimo lo pruebo y te aviso, gracias!!!!
  #12 (permalink)  
Antiguo 08/06/2011, 05:53
 
Fecha de Ingreso: noviembre-2010
Mensajes: 113
Antigüedad: 14 años
Puntos: 10
Respuesta: [APORTE] Subir y redimensionar imagenes

Una cosa:
Cuando vamos a modificar el ancho o alto de la imagen, antes comprobamos si es mayor que el tamaño que queremos con esto:
Código PHP:
    if($image->getWidth() > 400){
        
$image->resizeToWidth(400);
        
$w400 'w400_' $_FILES['image']['name'];
        
$image->save($w400);
    } 
no seria mejor anadir esa comprobación a la clase para llamarlo simplemente así:
Código PHP:
        $image->resizeToWidth(400);
        
$w400 'w400_' $_FILES['image']['name'];
        
$image->save($w400); 
Como ya le pasamos el valor 400, en este caso, dentro de la clase podriamos hacer esto:
Código PHP:
    public function resizeToWidth($width) {
        if(
$this->getWidth()>$width){
            
$ratio $width $this->getWidth();
            
$height $this->getHeight() * $ratio;
            
$this->resize($width$height);
        }
    } 
Edito: Ahora veo que lo malo de esto es que entonces, esta funcion dejaria de funcionar si quisieramos redimensionar la imagen para agrandarla...
  #13 (permalink)  
Antiguo 08/06/2011, 13:30
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

@abimaelrc,
no me funciona con tu script, me pone el fondo negro, te dejo mi como tengo mi clase para que vas:

Código PHP:
Ver original
  1. <?php
  2. class SimpleImage {
  3.  
  4.     private  $image;
  5.     private  $image_type;
  6.     private  $instance;
  7.     private  $transparent;
  8.  
  9.     /**
  10.      * patron singleton
  11.      *
  12.      * @version 0.2
  13.      * @author Lucas M. Sastre
  14.      * @access Public
  15.      * @name singleton
  16.      *
  17.      * @return $instance
  18.      *
  19.      * Modificado:
  20.      *
  21.      */
  22.     public static function singleton() {
  23.         if( self::$instance == null ) {
  24.             self::$instance = new self();
  25.         }
  26.  
  27.         return self::$instance;
  28.     }
  29.  
  30.     public function setTransparent($bool)
  31.     {
  32.         $this->transparent = (boolean)$bool;
  33.     }
  34.  
  35.     /**
  36.      * carga una imagen para obtener su propiedades
  37.      *
  38.      * @version 0.2
  39.      * @author Lucas M. Sastre
  40.      * @access Public
  41.      * @name load
  42.      *
  43.      * @param string $filename
  44.      *
  45.      * Modificado:
  46.      *
  47.      */
  48.     public function load($filename) {
  49.         $image_info = getimagesize($filename);
  50.         $this->image_type = $image_info[2];
  51.         if( $this->image_type == IMAGETYPE_JPEG ) {
  52.             $this->image = imagecreatefromjpeg($filename);
  53.         } elseif( $this->image_type == IMAGETYPE_GIF ) {
  54.             $this->image = imagecreatefromgif($filename);
  55.         } elseif( $this->image_type == IMAGETYPE_PNG ) {
  56.             $this->image = imagecreatefrompng($filename);
  57.         }
  58.     }
  59.  
  60.     /**
  61.      * guarda una imagen
  62.      *
  63.      * @version 0.2
  64.      * @author Lucas M. Sastre
  65.      * @access Public
  66.      * @name save
  67.      *
  68.      * @param string $filename
  69.      * @param string $image_type
  70.      * @param integer $compression
  71.      * @param integer $permissions
  72.      *
  73.      * Modificado:
  74.      *
  75.      */
  76.     public function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
  77.         if( $image_type == IMAGETYPE_JPEG ) {
  78.             imagejpeg($this->image,$filename,$compression);
  79.         } elseif( $image_type == IMAGETYPE_GIF ) {
  80.             imagegif($this->image,$filename);
  81.         } elseif( $image_type == IMAGETYPE_PNG ) {
  82.             imagepng($this->image,$filename);
  83.         }
  84.         if( $permissions != null) {
  85.             chmod($filename,$permissions);
  86.         }
  87.     }
  88.  
  89.     /**
  90.      * genera la salida de la image segun su extension
  91.      *
  92.      * @version 0.2
  93.      * @author Lucas M. Sastre
  94.      * @access Public
  95.      * @name output
  96.      *
  97.      * @param string $image_type
  98.      *
  99.      * Modificado:
  100.      *
  101.      */
  102.     public function output($image_type=IMAGETYPE_JPEG) {
  103.         if( $image_type == IMAGETYPE_JPEG ) {
  104.             imagejpeg($this->image);
  105.         } elseif( $image_type == IMAGETYPE_GIF ) {
  106.             imagegif($this->image);
  107.         } elseif( $image_type == IMAGETYPE_PNG ) {
  108.             imagepng($this->image);
  109.         }
  110.     }
  111.  
  112.     /**
  113.      * recupera el ancho de la imagen
  114.      *
  115.      * @version 0.2
  116.      * @author Lucas M. Sastre
  117.      * @access Public
  118.      * @name getWidth
  119.      *
  120.      * Modificado:
  121.      *
  122.      */
  123.     public function getWidth() {
  124.         return imagesx($this->image);
  125.     }
  126.  
  127.     /**
  128.      * recupera el alto de la imagen
  129.      *
  130.      * @version 0.2
  131.      * @author Lucas M. Sastre
  132.      * @access Public
  133.      * @name getHeight
  134.      *
  135.      * Modificado:
  136.      *
  137.      */
  138.     public function getHeight() {
  139.         return imagesy($this->image);
  140.     }
  141.  
  142.     /**
  143.      * redimenciona segun el alto
  144.      *
  145.      * @version 0.2
  146.      * @author Lucas M. Sastre
  147.      * @access Public
  148.      * @name resizeToHeight
  149.      *
  150.      * @param integer $height
  151.      *
  152.      * Modificado:
  153.      *
  154.      */
  155.     public function resizeToHeight($height) {
  156.         $ratio = $height / $this->getHeight();
  157.         $width = $this->getWidth() * $ratio;
  158.         $this->resize($width,$height);
  159.     }
  160.  
  161.     /**
  162.      * redimenciona segun el ancho
  163.      *
  164.      * @version 0.2
  165.      * @author Lucas M. Sastre
  166.      * @access Public
  167.      * @name resizeToWidth
  168.      *
  169.      * @param integer $width
  170.      *
  171.      * Modificado:
  172.      *
  173.      */
  174.     public function resizeToWidth($width) {
  175.         $ratio = $width / $this->getWidth();
  176.         $height = $this->getheight() * $ratio;
  177.         $this->resize($width,$height);
  178.     }
  179.  
  180.     /**
  181.      * escala una imagen segun el valor pasado
  182.      *
  183.      * @version 0.2
  184.      * @author Lucas M. Sastre
  185.      * @access Public
  186.      * @name scale
  187.      *
  188.      * @param integer $scale
  189.      *
  190.      * Modificado:
  191.      *
  192.      */
  193.     public function scale($scale) {
  194.         $width = $this->getWidth() * $scale/100;
  195.         $height = $this->getheight() * $scale/100;
  196.         $this->resize($width,$height);
  197.     }
  198.  
  199.     /**
  200.      * no reduce una imagen
  201.      *
  202.      * @version 0.2
  203.      * @author Lucas M. Sastre
  204.      * @access Public
  205.      * @name noResize
  206.      *
  207.      *
  208.      * Modificado:
  209.      *
  210.      */
  211.     public function noResize() {
  212.         $new_image = imagecreatetruecolor($this->getWidth(), $this->getHeight());
  213.  
  214.         //creo la transprencia para los png y gif
  215.         if(($this->image_type == IMAGETYPE_GIF) OR ($this->image_type == IMAGETYPE_PNG)) {
  216.             imagealphablending($this->image, false);
  217.             imagesavealpha($this->image,true);
  218.             $transparent = imagecolorallocate($new_image, 255, 255, 255);//imagecolorallocatealpha($new_image, 255, 255, 255, 127);
  219.             //imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
  220.             imagefill($new_image, 0, 0, $transparent);
  221.         }
  222.  
  223.         imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $this->getWidth(), $this->getHeight(), $this->getWidth(), $this->getHeight());
  224.         $this->image = $new_image;
  225.     }
  226.  
  227.     /**
  228.      * reduce una imagen
  229.      *
  230.      * @version 0.2
  231.      * @author Lucas M. Sastre
  232.      * @access Public
  233.      * @name resize
  234.      *
  235.      * @param integer $width
  236.      * @param integer $height
  237.      *
  238.      * Modificado:
  239.      *
  240.      */
  241.     public function resize($width,$height) {
  242.         $new_image = imagecreatetruecolor($width, $height);
  243.  
  244.         //creo la transprencia para los png y gif
  245.        /*
  246. asi tenia mi codigo original
  247. if(($this->image_type == IMAGETYPE_GIF) OR ($this->image_type == IMAGETYPE_PNG)) {
  248.             imagealphablending($this->image, false);
  249.             imagesavealpha($this->image,true);
  250.             $transparent = imagecolorallocate($new_image, 255, 255, 255);//imagecolorallocatealpha($new_image, 255, 255, 255, 127);
  251.             //imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
  252.             imagefill($new_image, 0, 0, $transparent);
  253.         }
  254.  
  255.         imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  256.         $this->image = $new_image;*/
  257.  
  258.         $newImage = imagecreatetruecolor($width, $height);
  259.         if($this->image_type == IMAGETYPE_PNG && $this->transparent === true){
  260.             imagealphablending($newImage, false);
  261.             imagesavealpha($newImage, true);
  262.             $transparent = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
  263.             imagefilledrectangle($newImage, 0, 0, $width, $height, $transparent);
  264.         }
  265.         imagecopyresampled($newImage, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  266.         $this->image = $newImage;
  267.     }
  268. }
  269. ?>

salu2
  #14 (permalink)  
Antiguo 08/06/2011, 13:37
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: [APORTE] Subir y redimensionar imagenes

y asi es como lo uso en mi controlador:
Código PHP:
Ver original
  1. if ($file['name']!='') {
  2.                     $nombreFoto = $this->Utilidades->validarNombreArchivo($file['name']);
  3.                     $sinformatos=array("_jpg","_png","_gif","_jpeg","_JPEG","_JPG","_PNG","_GIF");
  4.                     $conformatos=array(".jpg",".png",".gif",".jpeg",".JPEG",".JPG",".PNG",".GIF");
  5.  
  6.                     $rutaFoto = $this->Config->get('imagenes')."productos/prod_".$idProductos."_".$nombreFoto;
  7.                     $rutaFotoThumb = $this->Config->get('imagenes')."productos/prod_".$idProductos."_".$nombreFoto;
  8.                     //creo el thumb
  9.                     $image->load($file['tmp_name']);
  10.                     //seteo si quiero la imagen con fondo transparente
  11.                     $image->setTransparent(true);
  12.                    
  13.                     //valido si es un libro o un medicamento para setear los tamaños
  14.                     if($_REQUEST['tipo'] == 1) {
  15.                         $image->resize(65,142);
  16.                     }
  17.                     else {
  18.                         $image->resize(93,128);
  19.                     }
  20.  
  21.                     $image->save($rutaFotoThumb) ;
  #15 (permalink)  
Antiguo 08/06/2011, 15:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

El codigo original y el sexto ejemplo sí me funciona. ¿Trataste exactamente el que tengo al principio? Tomé de ejemplo esta imagen

y me funcionó.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 05/07/2011, 12:58
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

por si le sirve a alguien, la clase analizada acá, cuando hace el cambio de tamaño de un gif con transparencia, este la pierde y en su lugar aparece el típico fondo negro, al método resize el hice un cambio que soluciona esto.

Código PHP:
  public function resize($width$height)
  {
        
$newImage imagecreatetruecolor($width$height);
    if(
$this->getImageType() == 'image/png' && $this->_transparent === true)
     {
      
imagealphablending($newImagefalse);
      
imagesavealpha($newImagetrue);
      
$transparent imagecolorallocatealpha($newImage255255255127);
      
imagefilledrectangle($newImage00$width$height$transparent);
      
imagecopyresampled($newImage$this->_image0000$width$height$this->getWidth(), $this->getHeight());
         }
      else if(
$this->getImageType() == 'image/gif' && $this->_transparent === true)
        {
            
$transcolor=imagecolortransparent($this->_image);
            if(
$transcolor!=-1)
            {
                 
$trnprt_color imagecolorsforindex($this->_image$transcolor);
                 
$trnprt_indx imagecolorallocatealpha($newImage$trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue'], $trnprt_color['alpha']);
                 
imagefill($newImage00$trnprt_indx);
                 
imagecolortransparent($newImage$trnprt_indx);                 
            }
            
imagecopyresized($newImage$this->_image0000$width$height$this->getWidth(), $this->getHeight());  
        }
        else
      
imagecopyresampled($newImage$this->_image0000$width$height$this->getWidth(), $this->getHeight());
         
$this->_image $newImage;
  } 
espero le sirva a alguien
__________________
aconcaguaestudio.com
  #17 (permalink)  
Antiguo 05/07/2011, 12:59
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

ahora solo falta el tema de los gif animados, que no pierda la animación
__________________
aconcaguaestudio.com
  #18 (permalink)  
Antiguo 05/07/2011, 14:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

Ya agregué el código que indicaste, con algunos cambios, porque no vi necesario partes del código que brindaste.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 05/07/2011, 15:51
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

perfecto, ya va quedando más completa...
__________________
aconcaguaestudio.com
  #20 (permalink)  
Antiguo 06/07/2011, 08:16
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: [APORTE] Subir y redimensionar imagenes

Cita:
Iniciado por iviamontes Ver Mensaje
ahora solo falta el tema de los gif animados, que no pierda la animación
La verdad es que hoy me pico la curiosidad y estoy en ello ahora.

Por ahora he conseguido separar los frames y crear una imagen gif por cada uno de ellos en pocas líneas pero a ver si alguien el foro me orienta sobre las siguientes dudas a ver si lo acabo de una vez.

Ahora ya separados los frames ¿Como podría unirlos en un intervalo de tiempo? Hasta ahora no creo que haya nada d eso en el GD. ¿Hay alguna otra forma?

Aparte de eso las animaciones tienen un intervalo de tiempo. Si esta varía la imagen ya no es igual. ¿Ese dato está dentro de la codificación del archivo?

Mmm a ver si acabo esto que odio dejar las cosas a mitad, a último remedio lo posteo hasta donde lo llevo y que alguien coja el relevo jejeje.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #21 (permalink)  
Antiguo 06/07/2011, 08:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

Interesante. Verificaré a ver si se puede lograr. Postea como hiciste para dividirlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #22 (permalink)  
Antiguo 06/07/2011, 09:03
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

muy bien IEKK, yo tmb estoy en la misma tarea...pero en el trabajo no me queda mucho tiempo, tengo que hacerlo en mi casa por la noche, ayer empecé....
mañana traigo algo
__________________
aconcaguaestudio.com
  #23 (permalink)  
Antiguo 06/07/2011, 09:03
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: [APORTE] Subir y redimensionar imagenes

Es un poco feo tener que pasarle el $fileName, pero no ví que se guardase en ningún lado de la clase y no quería tocarla.

Código PHP:
        public function animated_gif($fileName
        {
            if(
$this->_imageType == IMAGETYPE_GIF){
                
                if(!(
$fh file_get_contents($fileName))){
                     break;
                }
                
                
$reg_exp='#\x00\x21\xF9\x04.{4}\x00\x2C#s';
                
                if(
preg_match($reg_exp$fh$matches)){ 
                    
$head=$matches[0];
                }
                
                
$bodypreg_split($reg_exp$fh);
                
                if(
count($body>1) and isset($head)){
                    
                    foreach (
$body as $key => $value){
                        if(
$key!=0){
                            
$img=imagecreatefromstring($body[0].$head.$value);                                            
                            if(
imagegif ($img'probando'.$key.'.gif')) echo '- Se ha creado el frame '.$key.'<br>';                            
                        }
                    }
                }                
                
            }          
        } 
Unas observaciónes:

-Por lo que leí en el manual algunos gif guardados desde Adobe CS5 (Vaya fastidio que yo lso creo ahí )cambia el encabezado por lo que también habría que cambiar esa expresión regular. Está posteada en createimagefromgif del manual, pero aún no lo he probado.

-Creo que voy a tener que añadir un copymerge() porque hay gif que no cambian toda la capa sino que dejan un fondo y animan sólo una. Al separar esas partes del fondo se ve raro obviamente.

P.E:
Bien: http://www.pixeljoint.com/files/icons/vaderflow.gif
Rara: http://www.gifmania.com/baloncesto/c...YABASKET_1.gif

Y leyendo y requeteleyendo parece que no es posible unir los frames con X tiempo. ... Pero espero estar equivocado.

Saludos.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #24 (permalink)  
Antiguo 06/07/2011, 09:09
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: [APORTE] Subir y redimensionar imagenes

Cita:
Iniciado por iviamontes Ver Mensaje
muy bien IEKK, yo tmb estoy en la misma tarea...pero en el trabajo no me queda mucho tiempo, tengo que hacerlo en mi casa por la noche, ayer empecé....
mañana traigo algo
Genial, yo me quede ya un poco porque tendré que añadirle el primer frame a los demás para aquellos que sólo animan una capa encima de otra jeje muy propio de los gif que yo hago. A ver si hay otras formas más eficientes.

Edito: por cierto no puse comentarios... pero cualquier cosa que no se entienda me dicen. Lo probé con la clase y va bien.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #25 (permalink)  
Antiguo 06/07/2011, 09:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [APORTE] Subir y redimensionar imagenes

Según la wikipedia, cada frame guarda información sobre el tiempo/transparencia del cuadro, por lo que todo depende de como separes los cuadros, ya que debes de conservar esa información cuando separas los gifs, y al unirlo, unirlo con esa información de regreso.
  #26 (permalink)  
Antiguo 06/07/2011, 09:22
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

encontré 2 clases para el manejo de gif, se llaman GIFDecoder y GIFEncoder, que sirven para
separar un gif x frames o simplemente varias imagenes las une en un gif, por lo que he visto lo hace a nivel de bits sin utilizar ninguna función gráfica predefinida.

al que le interese se la puedo mandar...
en la casa me pongo a trabajar en lo del gif.
__________________
aconcaguaestudio.com
  #27 (permalink)  
Antiguo 06/07/2011, 09:35
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: [APORTE] Subir y redimensionar imagenes

Cita:
Iniciado por GatorV Ver Mensaje
Según la wikipedia, cada frame guarda información sobre el tiempo/transparencia del cuadro, por lo que todo depende de como separes los cuadros, ya que debes de conservar esa información cuando separas los gifs, y al unirlo, unirlo con esa información de regreso.
Si en el frame está el tiempo, entonces sigue ahí. Pero el problema sigue siendo como unirlas.
No sé si hay mejor forma de sacar los frames.
Yo acabé por mirar que el contenido del archivo como un string así que y viendo que cumplía una estructura separé las partes así:

Gif con 3 frames:
Código PHP:
<apertura>
<
head>

<
frame>
<
apertura>

<
frame>
<
apertura>

<
frame>
<
apertura
3 Gifs (1 x frame):
Código PHP:
<apertura>
<
head>
<
frame>
<
apertura>

<
apertura>
<
head>
<
frame>
<
apertura>

<
apertura>
<
head>
<
frame>
<
apertura
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #28 (permalink)  
Antiguo 06/07/2011, 09:36
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: [APORTE] Subir y redimensionar imagenes

para unirla usa la clase que te digo.
__________________
aconcaguaestudio.com
  #29 (permalink)  
Antiguo 06/07/2011, 09:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [APORTE] Subir y redimensionar imagenes

Creo entonces lo que debes de hacer es, ya teniendo los $body, en lugar de escribirlos en un archivo por separado, crear las imagenes en memoria usando imagecreatefromstring(), y después redimensionar los cuadros y volverlos a unir en memoria para que no pierdas la estructura inicial.
  #30 (permalink)  
Antiguo 06/07/2011, 09:45
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: [APORTE] Subir y redimensionar imagenes

Cita:
Iniciado por GatorV Ver Mensaje
Creo entonces lo que debes de hacer es, ya teniendo los $body, en lugar de escribirlos en un archivo por separado, crear las imagenes en memoria usando imagecreatefromstring(), y después redimensionar los cuadros y volverlos a unir en memoria para que no pierdas la estructura inicial.
Pues perfectamente puede ser factible. En vez de guardarlas en un directorio, modificar su tamaño en memoria, volver a cambiar la estructura y dejarlas unidas como al principio pero ya con el tamaño cambiado... ¿MMm pero como mstrarla animada? creategif() mostraría el gif sin animar creo
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(

Etiquetas: imagenes, redimensionar
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

SíEste tema le ha gustado a 15 personas




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