Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2009, 11:27
Avatar de JessicaTJ
JessicaTJ
 
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 19 años, 9 meses
Puntos: 25
Redimensionar GIFs con fondos transparentes

Hola chicos, yo de nuevo, ahora con un problemita con la redimension de imagenes GIF transparentes.

Bueno, al redimensionar una imagen GIF con fondo transparente, este se pierde, encontre esto:

Código PHP:
<?php
$imagen 
= imagecreatefromgif('imagen.gif');
$back = imagecolorallocatealpha($imagen, 255, 255, 255, 127);
imagefill($imagen, 1, 1, $back);
?>
Pero no encuentro la manera de integrarlo al codigo que utilizo, una clase que encontre aki en los foros, vendria a ser esta:

Código PHP:
<?php
    
class Imagen {
          var 
$entrada = "";
          var 
$width = 0;
          var 
$height = 0;
          var 
$tipo = 0;

          function 
Imagen($ent) {
                   
$this->entrada = $ent;
                   list(
$wid, $hei, $tip) = getimagesize($ent);
                   
$this->width = $wid;
                   
$this->height = $hei;
                   
$this->tipo = $tip;
          }

          function 
getThumb($w, $h, $salida, $opc = false) {
                   
$ent = $this->entrada;
                   
$tip = $this->tipo;
                   
$wid = $this->width;
                   
$hei = $this->height;

                   if (
$w) {
                      
$newwidth = $w;
                      
$newheight = round(($hei / $wid) * $newwidth);
                   }  elseif (
$h) {
                      
$newheight = $h;
                      
$newwidth = round(($wid / $hei) * $newheight);
                   }
                   
// Cargar la imagen
                   
$thumb = imagecreatetruecolor($newwidth, $newheight);
                   if (
$tip == 1) {
                      
$source = imagecreatefromgif($ent);
                   }  elseif (
$tip == 2) {
                      
$source = imagecreatefromjpeg($ent);
                   }  elseif (
$tip == 3) {
                      
$source = imagecreatefrompng($ent);
                   }

                   
// Redimensionar
                   
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $wid, $hei);

                   
// Mostrar la nueva imagen
                   
if ($opc) return $thumb;
                   else return 
imagejpeg($thumb, $salida);
          }

          function 
getNothumb($w, $h, $salida, $opc = false) {
                   
$ent = $this->entrada;
                   
$tip = $this->tipo;
                   
$wid = $this->width;
                   
$hei = $this->height;

                   if (
$h) {
                      
$newheight = $h;
                      
$newwidth = round(($wid / $hei) * $newheight);
                   }  else if (
$w) {
                      
$newwidth = $w;
                      
$newheight = round(($hei / $wid) * $newwidth);
                   }
                   
// Cargar la imagen
                   
$thumb = imagecreatetruecolor($newwidth, $newheight);
                   if (
$tip == 1) {
                      
$source = imagecreatefromgif($ent);
                   }  elseif (
$tip == 2) {
                      
$source = imagecreatefromjpeg($ent);
                   }  elseif (
$tip == 3) {
                      
$source = imagecreatefrompng($ent);
                   }

                   
// Redimensionar
                   
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $wid, $hei);

                   
// Mostrar la nueva imagen
                   
if ($opc) return $thumb;
                   else return 
imagejpeg($thumb, $salida);
          }

          function 
getCorte($we, $he, $salida, $opc = false) {
                   
$img = $this->entrada;
                   
$wid = $this->width;
                   
$hei = $this->height;
                   
$tip = $this->tipo;

                   if (
$wid / $we > $hei / $he) {
                      
$hp = $hei;
                      
$wp = round(($we / $he) * $hp);
                   }  else {
                      
$wp = $wid;
                      
$hp = round(($he / $we) * $wp);
                   }

                   
$lp = round(($wid - $wp) / 2);
                   
$tp = round(($hei - $hp) / 2);

                   
$thumb = imagecreatetruecolor($we, $he);
                   if (
$tip == 1) {
                     
$source = imagecreatefromgif($img);
                    }  elseif (
$tip == 2) {
                     
$source = imagecreatefromjpeg($img);
                   }  elseif (
$tip == 3) {
                     
$source = imagecreatefrompng($img);
                   }

                   
imagecopyresampled($thumb, $source, 0, 0, $lp, $tp, $we, $he, $wp, $hp);

                   if (
$opc) return $thumb;
                   else return 
imagejpeg($thumb, $salida);
          }
    }

    if (isset(
$_GET["img"])) {
       
$img = new Imagen($_GET["img"]);
       
$tip = $_GET["tip"];
       
$w = $_GET["w"];
       
$h = $_GET["h"];

       
header("Content-type: image/jpeg");
       if (
$tip == 0) {
          
imagejpeg($img->getThumb($w, $h, "", true));
       }  elseif (
$tip == 1) {
          
imagejpeg($img->getNothumb($w, $h, "", true));
       }  elseif (
$tip == 2) {
          
imagejpeg($img->getCorte($w, $h, "", true));
       }
    }
?>
Ke esta aki:
http://www.forosdelweb.com/f91/redim...on-php-665923/

Alguna idea de como integrar la funcion para que los GIFs con fondo transparentes los redimensione tambien con el fondo transparente?

De corazon de nuevo agradecere mil su ayuda