2011-10-24 26 views
8

Tôi đã thực hiện một chức năng để xử lý các tệp jpg và png, nhưng tôi gặp lỗi khi cố tải lên tệp png.tạo các tệp png

này là chức năng:

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; 

}

tác phẩm như mong muốn với jpg, png, nhưng với tôi nhận được msg lỗi này:

Cảnh báo: imagepng() [function.imagepng ]: gd-png: lỗi libpng gây tử vong: zlib không thể khởi chạy lỗi máy nén - luồng trong E: ... \ php \ functions.upload.php trên dòng 48

Cảnh báo: imagepng() [function.imagepng] : lỗi gd-png: setjmp trả về tình trạng lỗi trong E: ... \ php \ functions.upload.php trên đường dây 48

EDIT:

tôi chỉ cần thay đổi loại bỏ các imagepng(); và chỉ sử dụng imagejpeg và nó hoạt động như thế này, tôi chỉ muốn lưu các tập tin jpg anyways. cảm ơn!

+0

whats on line 48 –

Trả lời

35

Vấn đề là vì imagejpeg chất lượng có thể lên tới 100, trong khi imagepng chất lượng tối đa là 9. thử

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

nhờ didnt biết rằng 9 là tối đa cho png – Prozi

+0

Great điểm ... thanks for the câu trả lời. bạn đã lưu tôi – shan

3

Bạn đang sử dụng giá trị nào cho cài đặt chất lượng? imagepng() sử dụng các giá trị 0-9, trong khi imagejpeg() sử dụng 0-100.

+0

tôi sử dụng 85 trên cả hai: P – Alexander

3

câu trả lời của Johnny Craig này là chính xác, ngoại trừ một điều, nó có mối quan hệ nghịch đảo. 9 - là khả năng nén nhất và 0 - không nén, vì vậy chất lượng tốt nhất có thể.

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

Tôi đoán đây phải là câu trả lời được chấp nhận. –

+0

Liên kết đến hướng dẫn sử dụng: http://php.net/manual/en/function.imagepng.php – Leukipp

Các vấn đề liên quan