【发布时间】:2020-03-14 08:16:29
【问题描述】:
我有一个带有图片的 URL。我将图像保存在变量中。如果我使用 Imagick 加载变量,则图像在删除 alpha 后损坏。
代码:
$image = new Imagick();
$image->readImageBlob($picture);
$image->writeImage ("test.png");
代码:
$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(11);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("test.png");
PHP 版本 7.3.11
imagick 模块版本:3.4.4RC2
使用 ImageMagick 编译的 Imagick 版本:ImageMagick 7.0.7-11 Q16 x64 2017-11-23
ImageMagick 发布日期:2017-11-23
图像在“setImageAlphaChannel”之后立即损坏。是源文件导致问题吗?如果是,有没有办法修复损坏的图像?
提前致谢!
编辑:
这是我的完整代码:
<?php
$url="https://i.imgur.com/jD5hRgO.png";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $url);
$picture = curl_exec ($ch);
curl_close($ch);
$image = new Imagick();
$image->readImageBlob($picture);
$image->writeImage ("before.png");
$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(11);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("after.png");
?>
【问题讨论】:
-
您使用
11值来设置Alpha 通道——它映射到OpaqueAlphaChannel。您应该使用预定义的常量Imagick::ALPHACHANNEL_REMOVE,它将用背景颜色替换 Alpha 通道。 -
这解决了我的问题!如果您将其发布为答案,我会将其标记为正确。感谢您的帮助!
标签: php imagemagick png imagick alpha-transparency