4

我构建了一个使用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。

4

2 回答 2

2

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

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

  2. 根据这个页面,你可以调用一个名为 opaque 的方法:

    不透明: color=>color name, fill=>color name, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Opacity, Red, RGB, Yellow}, 反转=>{对,错}

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

    $icon->ReadImage($imagepath);   
    $icon->Transparent(color=>'#010101');
    
  4. 丑陋的黑客)在图像上运行转换作为系统命令,然后加载它:

    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',
    );
    
于 2012-08-16T13:36:29.477 回答
0

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

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

于 2012-08-12T06:48:28.193 回答