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 と呼ばれるメソッドを呼び出すことができます。

    Opaque : color=>color name, fill=>color name, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Opacity, Red, RGB, Yellow}, invert =>{真、偽}

  3. 最初に画像を読み取り、次に色を透明にします(念のため):

    $icon->ReadImage($imagepath);   
    $icon->Transparent(color=>'#010101');
    
  4. (醜いハック) イメージに対してシステム コマンドとして 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',
    );
    
于 2012-08-16T13:36:29.477 に答える
0

アルファチャネルを使用するようにImageMagickに指示する必要があります。

コマンドラインでは、これはになります-alpha On

于 2012-08-12T06:48:28.193 に答える