PHP que cambia el tamaño de PNG da como resultado archivos corruptos

Tengo un script PHP que cambia el tamaño de los archivos .jpg, .gif y .png a un cuadro delimitador.

            $max_width = 500;
            $max_height = 600;
            $filetype = $_FILES["file"]["type"];
            $source_pic = "img/" . $idnum;
            if($filetype == "image/jpeg")
            {
                $src = imagecreatefromjpeg($source_pic);                    
            } else if($filetype == "image/png")
            {
                $src = imagecreatefrompng($source_pic);                 
            } else if($filetype == "image/gif")
            {
                $src = imagecreatefromgif($source_pic);
            }
            list($width,$height)=getimagesize($source_pic);
            $x_ratio = $max_width / $width;
            $y_ratio = $max_height / $height;

            if( ($width <= $max_width) && ($height <= $max_height) )
            {
                $tn_width = $width;
                $tn_height = $height;
            } else if (($x_ratio * $height) < $max_height)
            {
                $tn_height = ceil($x_ratio * $height);
                $tn_width = $max_width;
            } else {
                $tn_width = ceil($y_ratio * $width);
                $tn_height = $max_height;
            }

            $tmp = imagecreatetruecolor($tn_width,$tn_height);
            imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
            $destination_pic = "img/thumbs/" . $idnum . "thumb";
            if($filetype == "image/jpeg")
            {
                imagejpeg($tmp,$destination_pic,80);
            } else if($filetype == "image/png")
            {
                imagepng($tmp,$destination_pic,80);
            } else if($filetype == "image/gif")
            {
                imagegif($tmp,$destination_pic,80);
            }
            imagedestroy($src);
            imagedestroy($tmp);

El script funciona bien con jpeg y gif, pero cuando se ejecuta en png, el archivo se dañará.

¿Hay algo especial que deba usar al trabajar con un png? Nunca he trabajado con este tipo de cosas en PHP, por lo que no estoy muy familiarizado con él.

preguntado el 08 de enero de 11 a las 17:01

Corrompido, ¿cómo? ¿Lo que sucede? ¿Qué contiene el código fuente del PNG? -

IrfanView dice, "Error de decodificación: archivo PNG no válido o no compatible". -

2 Respuestas

Primero, verifique si la compatibilidad con PNG está habilitada en su gd lib. Puede obtener esto de phpinfo, como función phpinfo().

No puedes configurar el parámetro $quality of imagepng() a 80, solo es posible de 1 a 9. Es mejor eliminarlo.

imagepng($tmp, $destination_pic);

Y si tiene algunos problemas con la transparencia, eche un vistazo a las siguientes funciones:

imagealphablending();
imagesavealpha();

Respondido el 08 de enero de 11 a las 20:01

¿Su servidor tiene habilitada la compatibilidad con PHP?

Respondido el 08 de enero de 11 a las 20:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.