Perl Imager:如何使 alpha 通道变成黑色而不是白色?
Perl Imager: how do I make the alpha channel become black insead of white?
我写了这段代码来将 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.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") );
也就是说,要保存的 i_background 参数就可以了。
我写了这段代码来将 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.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") );
也就是说,要保存的 i_background 参数就可以了。