我有一个使用GD库和PHP上传和调整图像大小的脚本。 我现在想要上传PNG图像并将其存储为PNG和JPEG,然后我会调整它的大小但是没关系。
我遇到的问题是,有时,图像的转换版本(jpg)会失真。其他时候很好。
我的代码取自StackOverflow上的另一个答案:
function png2jpg($originalFile, $outputFile, $quality){
$image = imagecreatefrompng($originalFile);
imagejpeg($image, $outputFile, $quality);
imagedestroy($image);
}
下面显示了扭曲结果的一个例子,我完全清楚我不会获得JPG的透明度,我只想要一个白色背景。有什么想法吗?
我无法发布图片,因此链接到原始版本:http://private.granvilleoil.com/prodImages/large/Petro-Patch.png) 和JPG:http://private.granvilleoil.com/prodImages/large/Petro-Patch.jpg)
答案 0 :(得分:2)
您需要使用白色(或任何您想要的)背景创建一个新图像,并将png中的非透明像素复制到该图像:
function png2jpg($originalFile, $outputFile, $quality) {
$source = imagecreatefrompng($originalFile);
$image = imagecreatetruecolor(imagesx($source), imagesy($source));
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
imagecopy($image, $source, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagejpeg($image, $outputFile, $quality);
imagedestroy($image);
imagedestroy($source);
}
答案 1 :(得分:0)
PHP只会复制PNG文件中的像素,如果您的png具有透明度,那么PHP将无法处理这些因素,从而导致您在转换后看到的内容。
答案 2 :(得分:0)
JPG格式不支持透明像素。
相反,您可以用白色/黑色替换透明像素,然后进行转换:
function png2jpg($originalFile, $outputFile, $quality){
$size = getimagesize($originalFile);
$blank = imagecreate($size[0], $size[1]);
$newImage = imagecopymerge($blank, $originalFile, 0, 0, 0, 0, $size[0], $size[1], $quality);
png2jpg($newImage, $outputFile, );
$image = imagecreatefrompng($newImage);
imagejpeg($image, $outputFile, $quality);
}
答案 3 :(得分:0)
也许如果您尝试在白色图像上从png制作图像,则可以修复此问题。
答案 4 :(得分:0)
我在http://www.phpclasses.org/中遇到了一个库,它基本上是PHP的GD库的包装器。它被称为GDImageManipulation或其他东西。它是一个简单的文件类,它处理您正在谈论的大多数初步图像操作。
看看它。这可能有所帮助。