Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl Magick图像转换中设置背景色_Perl_Imagemagick_Perlmagick - Fatal编程技术网

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

在Perl Magick图像转换中设置背景色,perl,imagemagick,perlmagick,Perl,Imagemagick,Perlmagick,我使用的是ImageMagick的Perl模块,用于将图像从GIF和PNG转换为JPEG。在我尝试转换具有透明背景的图像之前,一切都非常正常 Resize()函数的默认行为是使用黑色,这会破坏我们试图转换的图像。我想改为将默认背景色改为白色,但我不知道该怎么做 如果在命令行上使用Image Magick,则可以使用以下命令更改背景: convert image.gif -background \#FFFFFF -flatten image.jpg 下面是我用来调整图像大小和转换图像的perl代

我使用的是ImageMagick的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()方法成功设置默认背景色,我将不胜感激。提前感谢您的帮助

你试过了吗

$image->Flatten(background => 'white'); 
你试过了吗

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

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

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');
我用(一个更快的ImageMagick分支)测试了这一点,但它应该也适用于


我过去也曾尝试过类似的图像处理,上面的方法是我能想到的最好方法。

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

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');
我用(一个更快的ImageMagick分支)测试了这一点,但它应该也适用于


我过去也曾尝试过类似的图像处理,上面的方法是我能想到的最好的方法。

不幸的是,我无法以一种干净的方式实现这一点,只需使用Resize()方法并向其传递一个适当的参数来设置背景色

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


在我的估计中,这不是理想的解决方案,但它确实能可靠地工作。

不幸的是,我无法以一种干净的方式工作,只是简单地使用Resize()方法,并将一个适当的参数传递给它以设置背景色

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


在我看来,这不是理想的解决方案,但它确实工作可靠。

我也尝试过。它似乎也不起作用。调整图像大小后,它仍然显示为黑色背景。还有其他想法吗?我也试过了。它似乎也不起作用。调整图像大小后,它仍然显示为黑色背景。还有其他想法吗?