[英]Setting Background Color in Perl Magick Image Conversion
我正在使用Perl Magick ,这是Image Magick的Perl模块,可以将图像从GIF和PNG转换为JPEG。 一切正常,直到我尝试转换具有透明背景的图像为止。
Resize()函数的默认行为是使用黑色,这会破坏我们尝试转换的图像。 我想改为将默认背景颜色更改为白色,并且不知道该怎么做。
如果在命令行上使用Image Magick,则可以使用以下命令更改背景:
convert image.gif -background \#FFFFFF -flatten image.jpg
这是我用来调整图像大小和转换图像的perl代码:
use Image::Magick;
my $image = Image::Magick->new();
$image->Read("input.png");
$image->Resize(geometry=>'500x');
$image->Write("output.jpg");
我尝试了以下方法使其正常工作,但无济于事:
use Image::Magick;
my $image = Image::Magick->new();
$image->Read("input.png");
$image->Set(background => 'white');
$image->Flatten();
$image->Resize(geometry=>'500x');
$image->Write("output.jpg");
并且:
use Image::Magick;
my $image = Image::Magick->new();
$image->Read("input.png");
$image->Resize(geometry=>'500x',background=>'white');
$image->Write("output.jpg");
我很感谢您提供帮助,帮助您确定如何成功为Perl Magick Resize()方法设置默认背景色。 在此先感谢您的帮助!
我认为将透明区域转换为白色的最简单方法是在调整大小之前将图像粘贴在白色背景上:
use Image::Magick;
sub dims {
my ($image) = @_;
return $image->Get('width') . 'x' . $image->Get('height');
}
# First grab the image to be mangled.
my $image = Image::Magick->new();
$image->Read('input.png');
# Then, create a white image with the same size.
my $bg = Image::Magick->new(size => dims($image));
$bg->Read('xc:#ffffff');
# And overlay the original on top of it to fill the transparent pixels
# with white.
$bg->Composite(compose => 'Over', image => $image);
# Finally, continue on as normal using $bg instead of $image.
$bg->Resize(geometry => '500x');
$bg->Write('output.jpg');
我用Graphics :: Magick (ImageMagick的一个更快的分支)对此进行了测试,但是它应该与Image :: Magick相同。
过去,我尝试过进行类似的图像处理,而以上是我能想到的最好的方法。
不幸的是,我无法简单地使用Resize()方法并将其传递给适当的参数来设置背景颜色,因此无法以一种干净的方式使其正常工作。
相反,我为解决该问题所做的工作是先将文件转换为JPG格式,然后再调整大小。 这是可行的,因为Image Magick的默认背景色是白色,因此在转换过程中正确设置了背景,然后Resize()方法仅使用JPG图像而无需进行任何解释。
在我看来,这不是理想的解决方案,但是它确实可以可靠地工作。
你试过了吗
$image->Flatten(background => 'white');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.