создание файлов png

Я создал функцию для обработки файлов jpg и png, но я получаю ошибку при попытке загрузить файл png.

это функция:

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; 

}

работает как следует с jpg, но с png я получаю эту ошибку msg:

Предупреждение: imagepng () [function.imagepng]: gd-png: fatal ошибка libpng: zlib не удалось инициализировать ошибку компрессора – поток в E: … \ php \ functions.upload.php в строке 48

Предупреждение: imagepng () [function.imagepng]: ошибка gd-png: setjmp возвращает условие ошибки в E: … \ php \ functions.upload.php в строке 48

РЕДАКТИРОВАТЬ :

я только что изменил удаление imagepng (); и использовал только imagejpeg, и он работал именно так, я просто хочу, чтобы jpg-файлы были сохранены в любом случае. благодаря!

Проблема заключается в том, что качество изображения может быть до 100, тогда как максимальное качество изображения – 9. Попробуйте это

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

Какую ценность вы используете для настройки качества? imagepng () использует значения 0-9, тогда как imagejpeg () использует 0-100.

Ответ Джонни Крейга правильный, кроме одного, он имеет обратную связь. 9 – максимально возможное сжатие, а 0 – без сжатия, поэтому максимально возможное качество.

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