php imagick将PNG转换为jpg
$image = "[...]"; //binary string containing PNG image
$file = fopen('image.tmp', 'wb');
fputs($file, $image);
fclose($file);
$image = new Imagick('PNG:image.tmp');
$image->thumbnailImage($width, $height);
$image->setImageFormat('jpg');
$image->setCompressionQuality(97);
$image->writeImage('image.jpg');
以上不起作用,并给我一个this图像的黑色图像。代替时php imagick将PNG转换为jpg
[...]
$image->setImageFormat('png');
$image->setCompressionQuality(97);
$image->writeImage('image.png');
一切都很好。我认为它必须做一些透明的背景,这是不可用的JPG格式。任何人都可以帮助解决这个问题(imagick没有很好的记录,所以我不知道如何帮助自己)。
找到了解决办法:
$white=new Imagick();
$white->newImage($width, $height, "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->setImageFormat('jpg');
$white->writeImage('image.jpg');
尝试增加$image->setBackgroundColor(0xFFFFFF);
后$image = new Imagick('PNG:image.tmp');
'PHP致命错误:未捕获异常'ImagickException'带有消息'无效的参数提供'',使用'#ffffff'代替不会导致失败,但也没有帮助。 'setImageBackgroundColor'不起作用 – rabudde
您可以使用setBackgroundColor
设置默认背景色为黑色别的东西。保存为JPG时,PNG透明度将被替换为背景颜色。
编辑:使用它像这样:
$img->setBackgroundColor(new ImagickPixel('#FFFFFF'));
另一种方法是透明的PNG转换为JPG格式,如Imagick::flattenImages提到:
$im = new Imagick('image.png');
$im->setImageBackgroundColor('white');
$im->flattenImages(); // This does not do anything.
$im = $im->flattenImages(); // Use this instead.
$im->setImageFormat('jpg');
$im->writeImage('image.jpg');
非常感谢,它解决了我的问题:) – kailash19
Many感谢这篇文章 –
这在处理PDF时也非常有用,因为'flattenImages'方法将页面重置为最后一个... Thanks @rabudde! – Roberto