Perl Imager:如何使 alpha 通道变成白色的黑色?



我写了这段代码来将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.51.00.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参数可以解决问题。

相关内容

  • 没有找到相关文章

最新更新