我创建了一个处理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我得到这个错误消息:
警告:imagepng()[function.imagepng]:gd-png:致命的libpng错误:zlib无法初始化压缩器 - 第48行的E:... \ php \ functions.upload.php中的流错误
警告:imagepng()[function.imagepng]:gd-png错误:setjmp在E:... \ php \ functions.upload.php第48行返回错误条件
编辑:
我刚刚更改了删除了imagepng();并且只使用了imagejpeg,它就像这样工作,我只想保存jpg文件。谢谢!
答案 0 :(得分:40)
问题在于imagejpeg
质量最高可达100,而imagepng
最高质量为9。
试试这个
else if ($type == "png") {
//imagepng() creates a PNG file from the given image.
$q=9/100;
$quality*=$q;
imagepng($newImage,$dst,$quality);
}
答案 1 :(得分:4)
您使用什么价值进行质量设置? imagepng()使用值0-9,而imagejpeg()使用0-100。
答案 2 :(得分:4)
Johnny Craig的回答是正确的,除了一件事,它有反比关系。 9 - 是最可能的压缩,0 - 没有压缩,所以最可能的质量。
if ($type == 'png') {
$quality = round((100 - $quality) * 0.09);
}