使用Image :: Magick和Perl使背景透明

时间:2012-07-27 18:35:14

标签: perl imagemagick transparency

我构建了一个使用Image::Magick绘制横幅的Perl脚本。

# ... some code
my $icon = Image::Magick->new();
$icon->Set(size => '16x16');
$icon->Transparent(color=>'#010101');
$icon->ReadImage($imagepath);
$full_image->Composite( # small icon 
    image=>$icon,
    compose=>'Over',
    opacity=>'99%',
    x=>'12',
    y=>'62',
);
# ... some code

通常情况下,图标背景(#010101)应该是透明的,但是失败了...... 知道为什么这不起作用?或者也许我可以用而不是透明方法?

修改:这两个图片均为PNG个文件。 Image::Magick版本为6.7。

2 个答案:

答案 0 :(得分:2)

我还没有真正使用过这个模块,但我有几个想法:)

  1. 您将$ full_image的不透明度设置为99%。您是否希望以较小的值使图像透明?

  2. 根据this页面,您可以调用名为opaque的方法:

      

    不透明:color =>颜色名称,填充=>颜色名称,频道=> {全部,默认,                 阿尔法,黑色,蓝色,CMYK,青色,灰色,绿色,索引,洋红色,不透明度,                 红色,RGB,黄色},invert => {True,False}

  3. 我会首先阅读图像,然后使颜色透明(以防万一):

    $icon->ReadImage($imagepath);   
    $icon->Transparent(color=>'#010101');
    
  4. Ugly hack )在图片上运行convert作为系统命令,然后加载它:

    my $icon = Image::Magick->new();
    $icon->Set(size => '16x16');
    system("convert -transparent '#010101' not_transp.png transp.png");
    $icon->ReadImage('transp.png');
    $full_image->Composite( # small icon 
        image=>$icon,
        compose=>'Over',
        opacity=>'99%',
        x=>'12',
        y=>'62',
    );
    

答案 1 :(得分:0)

您需要告诉ImageMagick使用Alpha通道。

在命令行上,这将是-alpha On