2011-10-24 14 views
8

Ho creato una funzione per gestire file jpg e png, ma ottengo un errore quando provo a caricare un file png.creazione file png

Questa è la funzione:

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; 

}

funziona come dovrebbe con jpg, png ma con ottengo questo errore msg:

Attenzione: imagepng() [function.imagepng ]: gd-png: errore di libpng fatale: zlib non è riuscito a inizializzare compressore - errore di flusso in E: ... \ php \ functions.upload.php sulla riga 48

Attenzione: imagepng() [function.imagepng] : Errore di gd-png: setjmp ritorna in condizione di errore E: ... \ php \ functions.upload.php on line 48

EDIT:

Ho appena cambiato rimosso l'imagepng(); e usato solo imagejpeg e ha funzionato in questo modo, voglio solo i file jpg salvati comunque. Grazie!

+0

cosa è sulla linea 48 –

risposta

35

Il problema è dovuto al fatto imagejpeg qualità può essere fino a 100, mentre imagepng massima qualità è 9. provare questo

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

grazie fatto sapere che il 9 era massimo per png – Prozi

+0

Ottimo punto di ... grazie per la risposta. mi hai salvato – shan

3

Quale valore si utilizza per l'impostazione della qualità? imagepng() usa valori 0-9, mentre imagejpeg() usa 0-100.

+0

ho usato 85 su entrambi: P – Alexander

3

risposta di Johnny Craig è corretto tranne una cosa, non ha relazione inversa. 9 - è la compressione più possibile e 0 - nessuna compressione, quindi la qualità più possibile.

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

Immagino che questa dovrebbe essere una risposta accettata. –

+0

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