创建png文件

时间:2011-10-24 16:26:24

标签: php

我创建了一个处理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文件。谢谢!

3 个答案:

答案 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);
}