Foros del Web » Programando para Internet » PHP »

se pierde la transparencia del png cuando redimensiono

Estas en el tema de se pierde la transparencia del png cuando redimensiono en el foro de PHP en Foros del Web. Hola a todos, para redimensionar imagenes estoy usando una clase que tiene estos metodos function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, ...
  #1 (permalink)  
Antiguo 28/06/2011, 06:31
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
se pierde la transparencia del png cuando redimensiono

Hola a todos, para redimensionar imagenes estoy usando una clase que tiene estos metodos

function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
return $this->image = $new_image;
}

function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}

entre otros, pero estos son los que ocupan ahora, y resulta que si es un png, con fondo transparente, pues pierde la transparencia y en su lugar poner un fondo negro... alguna idea de como pueda solucionar esto ?
__________________
aconcaguaestudio.com
  #2 (permalink)  
Antiguo 28/06/2011, 07:08
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: se pierde la transparencia del png cuando redimensiono

: nada, nada :
  #3 (permalink)  
Antiguo 28/06/2011, 08:15
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

bueno y cómo lo haces vos ???, redimensionas igual que yo ?
__________________
aconcaguaestudio.com
  #4 (permalink)  
Antiguo 28/06/2011, 08:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: se pierde la transparencia del png cuando redimensiono

Debes aplicar los filtros correctos para conseguir esto, de verdad en el manual de PHP hay excelente información al respecto.

http://php.net/imagecolorallocatealpha
http://php.net/imagecolortransparent
http://php.net/imagealphablending
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/06/2011, 08:25
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

ok, muchas gracias, ya reviso...
__________________
aconcaguaestudio.com
  #6 (permalink)  
Antiguo 28/06/2011, 10:12
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: se pierde la transparencia del png cuando redimensiono

Cita:
bueno y cómo lo haces vos ???, redimensionas igual que yo ?
En mi caso, uso una clase que se llama PhpThumbFactory: http://phpthumb.gxdlabs.com/

Aparte de PhpThumbFactory hay varias pero esta me gusta.

Demo: https://github.com/masterexploder/PH...ki/Basic-Usage
  #7 (permalink)  
Antiguo 04/07/2011, 10:24
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

disculpa que no te halla contestado antes, es que no me había sentado en la pc en días... ahora reviso lo que me dices, gracias.
__________________
aconcaguaestudio.com
  #8 (permalink)  
Antiguo 04/07/2011, 10:51
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
Puntos: 1517
Respuesta: se pierde la transparencia del png cuando redimensiono

Trata este tema http://www.forosdelweb.com/f68/aport...agenes-912637/ muestro un ejemplo con transparencia.
__________________
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 04/07/2011, 11:05
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

ahhh, es que la versión que usas ya no es la misma que tienen ahora
http://www.white-hat-web-design.co.u...ages-with-php/
pero en la actual no veo la parte del tratamiendo de las transparencias, me voy a tener que quedar con la versión de abimaelrc...
gracias
__________________
aconcaguaestudio.com
  #10 (permalink)  
Antiguo 05/07/2011, 10:42
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

bueno la clase de abimaelrc para este png no me funciona con esta img
sin embargo la clase que me da mayid funciona bien, pero no me gusta que decide cosas por mi, explico, si le dices resize(ancho, alto) el decide cual es la mejor proporcion de esa que le das y te hace el resize a esa medida que el decide, prefiero que me la deforme, pero que me haga caso
!!
__________________
aconcaguaestudio.com
  #11 (permalink)  
Antiguo 05/07/2011, 11:03
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
Puntos: 1517
Respuesta: se pierde la transparencia del png cuando redimensiono

Como que no te funciona

Acuérdate de indicar en la clase el segundo parametro, que indica que quieres que sea transparente.

Trata de esta forma para que veas que funciona
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * File: ResizePicture.php
  4.  * Author: Simon Jarvis
  5.  * Copyright: Simon Jarvis
  6.  * Date: 08/11/06
  7.  * Original link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
  8.  *
  9.  * Modified Date: 05/14/11
  10.  */
  11.  
  12. class ResizePicture {
  13.     private $_image;
  14.     private $_imageType;
  15.     private $_transparent;
  16.  
  17.     public function __construct($fileName=null, $transparent=false)
  18.     {
  19.         $this->setTransparent($transparent);
  20.  
  21.         if(!is_null($fileName)){
  22.             $this->load($fileName);
  23.         }
  24.     }
  25.  
  26.     public function setTransparent($bool)
  27.     {
  28.         $this->_transparent = (boolean)$bool;
  29.     }
  30.  
  31.     public function load($fileName)
  32.     {
  33.         $imageInfo = getimagesize($fileName);
  34.         $this->_imageType = $imageInfo[2];
  35.  
  36.         if($this->_imageType == IMAGETYPE_JPEG){
  37.             $this->_image = imagecreatefromjpeg($fileName);
  38.         }
  39.         elseif($this->_imageType == IMAGETYPE_GIF){
  40.             $this->_image = imagecreatefromgif($fileName);
  41.         }
  42.         elseif($this->_imageType == IMAGETYPE_PNG){
  43.             $this->_image = imagecreatefrompng($fileName);
  44.         }
  45.     }
  46.  
  47.     public function save($fileName, $compression=75, $permissions=null)
  48.     {
  49.         if($this->_imageType == IMAGETYPE_JPEG){
  50.             imagejpeg($this->_image, $fileName, $compression);
  51.         }
  52.         elseif($this->_imageType == IMAGETYPE_GIF){
  53.             imagegif($this->_image, $fileName);        
  54.         }
  55.         elseif($this->_imageType == IMAGETYPE_PNG){
  56.             imagepng($this->_image, $fileName);
  57.         }
  58.  
  59.         if(!is_null($permissions)) {
  60.             chmod($fileName, $permissions);
  61.         }
  62.     }
  63.  
  64.     public function output()
  65.     {
  66.         if($this->_imageType == IMAGETYPE_JPEG){
  67.             imagejpeg($this->_image);
  68.         }
  69.         elseif($this->_imageType == IMAGETYPE_GIF){
  70.             imagegif($this->_image);        
  71.         }
  72.         elseif($this->_imageType == IMAGETYPE_PNG){
  73.             imagepng($this->_image);
  74.         }  
  75.     }
  76.  
  77.     public function getWidth()
  78.     {
  79.         return imagesx($this->_image);
  80.     }
  81.  
  82.     public function getHeight()
  83.     {
  84.         return imagesy($this->_image);
  85.     }
  86.  
  87.     public function getImageType()
  88.     {
  89.         switch($this->_imageType){
  90.             case IMAGETYPE_JPEG:
  91.                 $imageType = 'image/jpeg';
  92.                 break;
  93.             case IMAGETYPE_GIF:
  94.                 $imageType = 'image/gif';
  95.                 break;
  96.             case IMAGETYPE_PNG:
  97.                 $imageType = 'image/png';
  98.                 break;
  99.             default:
  100.                 $imageType = null;
  101.         }
  102.         return $imageType;
  103.     }
  104.  
  105.     public function resizeToHeight($height)
  106.     {
  107.         $ratio = $height / $this->getHeight();
  108.         $width = $this->getWidth() * $ratio;
  109.         $this->resize($width,$height);
  110.     }
  111.  
  112.     public function resizeToWidth($width)
  113.     {
  114.         $ratio = $width / $this->getWidth();
  115.         $height = $this->getHeight() * $ratio;
  116.         $this->resize($width, $height);
  117.     }
  118.  
  119.     public function scale($scale)
  120.     {
  121.         $width = $this->getWidth() * $scale / 100;
  122.         $height = $this->getHeight() * $scale / 100;
  123.         $this->resize($width, $height);
  124.     }
  125.  
  126.     public function resize($width, $height)
  127.     {
  128.         $newImage = imagecreatetruecolor($width, $height);
  129.         if($this->getImageType() == 'image/png' && $this->_transparent === true){
  130.             imagealphablending($newImage, false);
  131.             imagesavealpha($newImage, true);
  132.             $transparent = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
  133.             imagefilledrectangle($newImage, 0, 0, $width, $height, $transparent);
  134.         }
  135.         imagecopyresampled($newImage, $this->_image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  136.         $this->_image = $newImage;  
  137.     }      
  138. }
  139. ?>
  140. <html>
  141. <head>
  142. <style>
  143. body{ background-color: #369; }
  144. </style>
  145. </head>
  146. <body>
  147. <?php
  148. if(!empty($_FILES['image']) && $_FILES['image']['error'] == UPLOAD_ERR_OK) {
  149.     $image = new ResizePicture($_FILES['image']['tmp_name'], true);
  150.     $image->resizeToWidth($image->getWidth());
  151.     $original = $_FILES['image']['name'];
  152.     $image->save($original);
  153. ?>
  154. Imagen grabada:
  155. <img src="/<?php echo $original; ?>" />
  156. <?php } ?>
  157.  
  158. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
  159.     <input type="file" name="image" />
  160.     <input type="submit" name="submit" value="Upload" />
  161. </form>
  162. </body>
  163. </html>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 05/07/2011, 11:23
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

tienes razón, disculpa si funciona, actualmente en esa url http://www.white-hat-web-design.co.u...e-resizing.php, tienen otra clase que era la que estaba usando yo, no tienen el tratamiento de los png, curioso que esta versión más antigua si los trate...
gracias
__________________
aconcaguaestudio.com
  #13 (permalink)  
Antiguo 05/07/2011, 11:41
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: se pierde la transparencia del png cuando redimensiono

http://objetivophp.com/?cat=104&paged=3
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #14 (permalink)  
Antiguo 05/07/2011, 11:47
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

gracias Ximenitaa, pero de verdad te invito a que pruebes usar la que abimaelrc propone, para que veas que cómodo es su uso, aunque estoy viendo que pierde la transparencia con los gif animados
__________________
aconcaguaestudio.com
  #15 (permalink)  
Antiguo 05/07/2011, 13:52
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
Puntos: 1517
Respuesta: se pierde la transparencia del png cuando redimensiono

Los gif, debe ser trabajado un poco diferente y entiendo que se pierde la animación. Sinceramente no lo he probado, pero podrías añadirlo al código para que también mantenga la transparencia.
__________________
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, 14:03
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: se pierde la transparencia del png cuando redimensiono

si ya eso lo hice, lo publiqué en el mismo hilo de tu aporte, así le queda a todos...
ahora estoy haciendo lo de no perder la animación, ya se que es posible
__________________
aconcaguaestudio.com
  #17 (permalink)  
Antiguo 05/07/2011, 15:09
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
Puntos: 1517
Respuesta: se pierde la transparencia del png cuando redimensiono

Ya vi lo que aportaste, añadí lo que hiciste al código principal, pero modifiqué ciertas cosas porque no vi necesario hacerlas como habías indicado, haz las pruebas y me dejas saber... Me funcionó con gif y png con transparencias y sin ella
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 05/07/2011, 15:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: se pierde la transparencia del png cuando redimensiono

Para redimensionar un gif animado es un poco más complicado, tienes que extraer todos los frames del gif en archivos independientes, y posteriormente redimensionar todos los frames, y volver a unir el gif.

Puedes encontrar varios ejemplos en Google, de como hacerlo, y solo sería aplicarles el código de transparencia a cada uno, y al final volver a armar el gif animado.

Saludos.
  #19 (permalink)  
Antiguo 05/07/2011, 15:50
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: se pierde la transparencia del png cuando redimensiono

Cita:
Iniciado por iviamontes Ver Mensaje
sin embargo la clase que me da mayid funciona bien, pero no me gusta que decide cosas por mi, explico, si le dices resize(ancho, alto) el decide cual es la mejor proporcion de esa que le das y te hace el resize a esa medida que el decide, prefiero que me la deforme, pero que me haga caso
!!
Me parece perfecto que modificaras un script existente. Yo te pase uno alternativo solo porque preguntabas. Pero aclaro que si se puede redimensionar guardando la proporcion, y hacer crop tambien en caso de que se excedan los limites.


Etiquetas: pierde, png, transparencia
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 05:29.