在Perl Magick图像转换中设置背景颜色

时间:2011-02-11 19:36:44

标签: perl imagemagick perlmagick

我正在使用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()方法成功设置默认背景颜色的任何帮助。在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

我认为将透明区域转换为白色的最简单方法是在调整图像大小之前将图像粘贴到白色背景上:

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一样。

过去我曾试图进行类似的图像修改,以上是我能想到的最好的图像。

答案 1 :(得分:1)

不幸的是,我无法以简洁的方式使用Resize()方法并将其传递给适当的参数来设置背景颜色。

相反,我为解决问题所做的是首先将文件转换为JPG格式,然后再调整大小。这是有效的,因为Image Magick的默认背景颜色是白色,因此在转换过程中正确设置背景,然后Resize()方法只使用JPG图像而无需进行任何解释。

在我估计中不是理想的解决方案,但确实可行。

答案 2 :(得分:0)

你试过吗

$image->Flatten(background => 'white');