Perl Imager:如何使alpha通道变为黑白相间?
我编写此代码是为了将PNG图像转换为JPEG:Perl Imager:如何使alpha通道变为黑白相间?,perl,image-processing,png,jpeg,alpha-transparency,Perl,Image Processing,Png,Jpeg,Alpha Transparency,我编写此代码是为了将PNG图像转换为JPEG: use Imager; use strict; my $img = Imager->new( file => './fsc.png' ); $img = $img->convert( preset => 'noalpha' ); $img = $img->scale( xpixels => 100 ); $img->write( type => 'jpeg', file => './fsc.j
use Imager;
use strict;
my $img = Imager->new( file => './fsc.png' );
$img = $img->convert( preset => 'noalpha' );
$img = $img->scale( xpixels => 100 );
$img->write( type => 'jpeg', file => './fsc.jpg' );
当通过带有alpha通道(透明)的PNG时,背景变为黑色。我想做的是把它换成白色
奇怪的是,如果我只是写:
my $img = Imager->new( file => './fsc.png' );
$img->write( type => 'jpeg', file => './fsc.jpg' );
jpeg有白色背景,但它当然没有按我需要的大小缩放。我不熟悉Perl的Imager模块,但我浏览了文档,找不到任何与设置背景颜色相关的内容,这是其他包中的情况(例如,gd,ImageMagick)在关闭alpha遮罩时转换为透明像素 如果这比我的任何其他答案都模糊,请原谅,但这可能会让你开始。我认为你可能需要做以下几点:
- 创建与PNG大小相同的新白色图像(不含alpha)
- 在新的白色背景上合成图像
$white = $white->compose(src=>$img)
您可能还需要在参数中添加mask=>$img
,并且您可能还需要尝试opacity=>0.5
或1.0
或0.0
如果有人知道得更清楚,请告诉我,我将删除此答案!根据Imager作者的建议,似乎最简单的解决方案是:
use Imager;
my $img = Imager->new( file => './fsc.png' );
$img = $img->scale( xpixels => 100 );
$img->write( type => 'jpeg', file => './fsc.jpg', i_background => Imager::Color->new("#FFF") );
这就是保存的IX背景参数。我的答案是解决你的问题的吗?如果是的话,请考虑把它当作你的答案。点击投票计数旁边的空心滴答声。如果不是,请说什么不起作用,这样我或其他人可以进一步帮助你。谢谢。我接受了这个答案,因为它在deed解决了这个问题(谢谢)。当打开图像时使用一个简单的参数就可以了,但要完成所有这一切还是有点尴尬。我将为Imager模块打开一个问题。在向Imager提交了一个bug之后,作者向我建议了另一个解决方案,这似乎是最简单的,我正在添加一个不同的答案。