gpt4 book ai didi

php - 在 Imagick for PHP 中透明为白色

转载 作者:IT王子 更新时间:2023-10-29 00:01:05 27 4
gpt4 key购买 nike

我有一个透明背景的 png 图像,我想将它转换为一个白色背景的 jpg 图像。

代码基本上是这样的:

$image = new Imagick('transparent.png');
$image->writeImage('opaque.jpg');

但这会创建一个黑色背景 jpg。我一直在努力处理最糟糕的文档,试图找到一种将透明转换为白色的方法,但无济于事。

编辑:好吧,我尝试了 Marc B 的想法并让它发挥作用。

$image = new Imagick('transparent.png');
$white = new Imagick();

$white->newImage($image->getImageWidth(), $image->getImageHeight(), "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->writeImage('opaque.jpg');

$image->destroy();
$white->destroy();

现在的问题是,它总是导致脚本出现段错误。

最佳答案

flattenImages() 确实有效。

但请记住,它不会修改给定的 \Imagick() 对象而是返回一个新对象:

$image = new \Imagick('transparent.png');

// Need to use the result of $image->flattenImages() here!
$image = $image->flattenImages();
$image->writeImage('opaque.jpg');

flattenImages() 默认为背景色white。如果您想使用其他背景颜色,您必须在加载图像之前设置它:

$image = new \Imagick();

// Needs to be called before the image is loaded!
$image->setbackgroundcolor('green');
$image->readimage('transparent.png');

$image = $image->flattenImages();
$image->writeImage('opaque.jpg');

一般而言,Imagick API 在函数调用顺序方面非常 是明智的(就像 convert 及其在命令行上的参数),因此请务必检查是否您的订单是正确的。

祝你好运!

2016 年 4 月编辑:

$image->flattenImages() was deprecated并应替换为:

$image->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN)

很难找到有关此的确切信息,但似乎这适用于 PHP >= 5.6。

感谢 vee 的提示!

关于php - 在 Imagick for PHP 中透明为白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com