2011-10-24 9 views
8

Hice una función para manejar archivos jpg y png, pero me sale un error al intentar cargar un archivo png.creando archivos png

Ésta es la función:

function createImg ($type, $src, $dst, $width, $height, $quality) { 

$newImage = imagecreatetruecolor($width,$height); 
if ($type == "jpg/jpeg") { 
    //imagecreatefromjpeg() returns an image identifier representing the image obtained from the given filename. 
    $source = imagecreatefromjpeg($src); 
} 
else if ($type == "png") { 
    //imagecreatefrompng() returns an image identifier representing the image obtained from the given filename. 
    $source = imagecreatefrompng($src); 
} 
imagecopyresampled($newImage,$source,0,0,0,0,$width,$height,getWidth($src),getHeight($src)); 
if ($type == "jpg/jpeg") { 
    //imagejpeg() creates a JPEG file from the given image. 
    imagejpeg($newImage,$dst,$quality); 
} 
else if ($type == "png") { 
    //imagepng() creates a PNG file from the given image. 
    imagepng($newImage,$dst,$quality);  
} 
return $dst; 

}

funciona como debería con jpg, png, pero con consigo este error msg:

Advertencia: imagepng() [function.imagepng ]: gd-png: error de libpng fatal: zlib no pudo inicializar el compresor - error de transmisión en E: ... \ php \ functions.upload.php en la línea 48

Advertencia: imagepng() [function.imagepng] : error gd-png: setjmp vuelve condición de error en E: ... \ php \ functions.upload.php en la línea 48

EDIT:

acabo de cambiar quitado la imagepng(); y usé solo imagejpeg y funcionó así, solo quiero que se guarden los archivos jpg de todos modos. ¡Gracias!

+0

lo que esta en la línea 48 –

Respuesta

35

El problema se debe a que imagejpeg calidad puede ser de hasta 100, mientras que imagepng calidad máxima es de 9. probar esto

else if ($type == "png") { 
//imagepng() creates a PNG file from the given image. 
$q=9/100; 
$quality*=$q; 
imagepng($newImage,$dst,$quality);  
} 
+0

no sabían que era 9 MAX png – Prozi

+0

gran punto ... gracias por la respuesta. me salvaste – shan

3

¿Qué valor está utilizando para la configuración de calidad? imagepng() usa los valores 0-9, mientras que imagejpeg() usa 0-100.

+0

i utilizado 85 tanto: P gracias – Alexander

3

respuesta de Johnny Craig es correcta, excepto una cosa, tiene relación inversa. 9 - es la compresión más posible, y 0 - sin compresión, por lo que la calidad más posible.

if ($type == 'png') { 
    $quality = round((100 - $quality) * 0.09); 
} 
+0

Supongo que esta debería ser una respuesta aceptada. –

+0

Enlace al manual: http://php.net/manual/en/function.imagepng.php – Leukipp

Cuestiones relacionadas