2011-10-24 14 views
8

Zrobiłem funkcję do obsługi plików jpg i png, ale pojawia się błąd podczas próby załadowania pliku png.tworzenie plików png

to funkcja:

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; 

}

działa jak należy z jpg, png ale otrzymuję ten błąd błędzie:

Warning: imagepng() [function.imagepng ]: gd-png: fatalny błąd libpng: zlib nie może zainicjować kompresora - błąd strumienia w E: ... \ php \ functions.upload.php na linii 48

Ostrzeżenie: imagepng() [function.imagepng] : Błąd GD-png: setjmp zwraca stan błędu E: ... \ php \ functions.upload.php na linii 48

EDIT:

Właśnie zmienił usunął imagepng(); i używałem tylko imagejpeg i działało tak, chcę tylko zachować pliki jpg. dzięki!

+0

co jest na linii 48 –

Odpowiedz

35

Problemem jest to, ponieważ imagejpeg jakość może wynosić do 100, natomiast imagepng maksymalna jakość jest 9. spróbować

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

dzięki nie wiedziałem, że 9 było max dla png – Prozi

+0

świetny punkt ... dzięki za odpowiedź. uratowałeś mnie – shan

3

Jakiej wartości używasz do ustawienia jakości? imagepng() używa wartości 0-9, natomiast imagejpeg() używa 0-100.

+0

użyłem 85 na obu: P – Alexander

3

odpowiedź Johnny Craig jest poprawne z wyjątkiem jednej rzeczy, to ma odwrotną zależność. 9 - jest najbardziej możliwą kompresją, a 0 - brak kompresji, a więc jak najwyższa jakość.

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

Myślę, że to powinna być akceptowana odpowiedź. –

+0

Link do instrukcji: http://php.net/manual/en/function.imagepng.php – Leukipp

Powiązane problemy