php imagick 将 PNG 转换为 jpg

发布于 2024-11-19 01:36:50 字数 751 浏览 6 评论 0原文

$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');

以上不起作用,并为我提供了 图像。当这样做时,

[...]
$image->setImageFormat('png');
$image->setCompressionQuality(97);
$image->writeImage('image.png');

一切都会恢复正常。我认为它必须用透明背景做一些事情,而 JPG 格式不提供这种功能。任何人都可以帮助解决这个问题(imagick 没有很好的记录,所以我不知道如何帮助自己)。

$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');

The above doesn't work and gives me a black image for this image. When doing instead

[...]
$image->setImageFormat('png');
$image->setCompressionQuality(97);
$image->writeImage('image.png');

all is fine again. I think it has to do something with transparent background, which isn't available in JPG format. Can anyone help to solve this (imagick isn't documented very well, so I don't know how to help myself).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情独悲 2024-11-26 01:36:50

找到了解决办法:

$white=new Imagick();
$white->newImage($width, $height, "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->setImageFormat('jpg');
$white->writeImage('image.jpg');

Found a solution:

$white=new Imagick();
$white->newImage($width, $height, "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->setImageFormat('jpg');
$white->writeImage('image.jpg');
裸钻 2024-11-26 01:36:50

另一种将透明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');

随着时间的推移,flattenImages() 已被弃用。
使用以下代码代替上面的行:

$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

Another way to convert transparent png to jpg, as mentioned in 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');

As time moves on, flattenImages() has been deprecated.
Instead of the line above use:

$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
独守阴晴ぅ圆缺 2024-11-26 01:36:50

您可以使用 setBackgroundColor 来将默认背景颜色设置为黑色以外的其他颜色。保存为 JPG 时,PNG 透明度将被背景颜色替换。

编辑:像这样使用它:

$img->setBackgroundColor(new ImagickPixel('#FFFFFF'));

You can use setBackgroundColor to set the default background color to something else than black. The PNG transparency will be replaced by the background color when saving to JPG.

Edit: Use it like so:

$img->setBackgroundColor(new ImagickPixel('#FFFFFF'));
遥远的绿洲 2024-11-26 01:36:50

尝试在 < 之后添加 $image->setBackgroundColor(0xFFFFFF);代码>$image = new Imagick('PNG:image.tmp');

Try adding $image->setBackgroundColor(0xFFFFFF); after $image = new Imagick('PNG:image.tmp');

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文