Perl 成像器 : how do I make the alpha channel become black insead of white?

标签 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.jpg' );

当传递带有 alpha channel (透明)的 PNG 时,背景变为黑色。我想做的就是把它变成白色。

奇怪的是,如果我只写:

my $img = Imager->new( file => './fsc.png' );
$img->write( type => 'jpeg', file => './fsc.jpg' );

jpeg 具有白色背景,但当然它没有缩放到我需要的大小。

最佳答案

我不熟悉 Perl 的 Imager 模块,但我浏览了文档,找不到任何与设置背景颜色相关的内容,而这正是其他软件包中发生的情况(例如 gd ImageMagick)在关闭 Alpha mask 时变为透明像素。

如果这比我的其他答案更模糊,请原谅我,但它可能会让您开始。我认为您可能需要执行以下操作:

  • 创建一个与 PNG 大小相同的新白色图像(无 Alpha)
  • 将图像合成到新的白色背景上

我怀疑上面的第二步看起来像:

$white = $white->compose(src=>$img)

可能还需要将mask=>$img添加到参数中,并且您可能还需要尝试不透明度=>0.51.00.0

如果有人更了解,请告诉我,我将删除此答案!

关于Perl 成像器 : how do I make the alpha channel become black insead of white?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50385932/

相关文章:

perl - foreach (<$IN>) 是否会读取文件?

perl - 在 Perl 中解析结构化文本文件

用于云中托管图像的 Javascript 灰度脚本

image-processing - DataLoader - 洗牌隐式对

python - 将 AsciiMath/MathML 转换为 SVG/PNG

php - 在php中从头开始创建带有文本的透明png

perl - 有Perl的jUnit吗?

perl - 如何在 Perl/Tk + AnyEvent 中停止 MainLoop

php - 快速获取图像的亮度/光度

JAVA:SVG 到 JPG 转换器