Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 Imager:如何使alpha通道变为黑白相间?_Perl_Image Processing_Png_Jpeg_Alpha Transparency - Fatal编程技术网

Perl Imager:如何使alpha通道变为黑白相间?

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

我编写此代码是为了将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模块,但我浏览了文档,找不到任何与设置背景颜色相关的内容,这是其他包中的情况(例如,gdImageMagick)在关闭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之后,作者向我建议了另一个解决方案,这似乎是最简单的,我正在添加一个不同的答案。