PHP删除Imagick中的alpha会导致图片损坏

问题描述 投票:0回答:1

我有一个带有图片的URL。我将图像保存在变量中。如果我用Imagick加载变量,则图像是在删除损坏的alpha之后的。

代码:

$image = new Imagick();
$image->readImageBlob($picture);
$image->writeImage ("test.png");

enter image description here

代码:

$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(11);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("test.png");

enter image description here

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");


?>
php imagemagick png imagick alpha-transparency
1个回答
0
投票

您想使用Imagick::ALPHACHANNEL_REMOVE

$image = new Imagick();
$image->readImageBlob($picture);
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->writeImage ("after.png");

这将替换具有背景色的透明像素。

“ setImageAlphaChannel”之后的图像被破坏。源文件是否引起了问题?

并不是真的坏了,但是问题是由源文件引起的。将Alpha通道设置为11(即C-API中的OpaqueAlphaChannel)将强制“隐藏”颜色值不透明。在您的示例中,看不见的RGB数据是生成图像的作者遗留下来的伪像。

如果是,是否有办法修复损坏的图像?

不!您需要从源重做损坏的文件。将-alpha opaque应用于alpha蒙版将具有破坏性。

["Masks"使用情况文章的引用...

此操作之后,由于原始的Alpha通道数据已被覆盖,因此无法再恢复图像的原始'形状'。

© www.soinside.com 2019 - 2024. All rights reserved.