如何用Perlmagick合成水印?

b91juud3  于 8个月前  发布在  Perl
关注(0)|答案(1)|浏览(50)

我写了一个脚本来水印图像。在命令行添加水印工作正常:

composite -dissolve 5% -gravity South watermark.png original.jpg new.jpg

现在,当我尝试使用Perlmagick进行水印时,复合部分并没有改变任何东西:

my $i = new Image::Magick;
my $watermark = $i->Read( "watermark.png" );

my $i2 = new Image::Magick;
my $p = $i->Read( "original.jpg" );

$i->Set( Gravity => 'Center' );
$i->Resize( geometry => "600x600" );
$i->Composite( image=>$watermark, compose=>"Dissolve", opacity=>5, gravity=>"South" );

$i->Write( 'jpg:temp_file' );

这样的脚本大小的图像,但不水印。
问题似乎是我提供溶解度的方式。在命令行上,我可以添加百分比到dissolve-attribute,但在API版本中,溶解本身就是属性。我尝试了不透明度,但这似乎不是正确的方法。
在Perlmagick中使用溶解的正确方法是什么?
编辑:我使用的图片
original
watermark
new(命令composite -dissolve 5% -gravity South watermark.png original.jpg new.jpg的结果)

ecbunoof

ecbunoof1#

我尝试了以下方法:

use strict;
use warnings;
use feature qw(say);
use Image::Magick;

my $watermark = Image::Magick->new();
{
    my $error = $watermark->Read( "watermark.png" );
    die "Cannot read watermark.png: $error" if $error;
}
my $original = Image::Magick->new();
{
    my $error = $original->Read( "original.jpg" );
    die "Cannot read original.jpg: $error" if $error;
}

#$watermark->Set( Gravity => 'Center' );
#$watermark->Resize( geometry => "600x600" );
{
    my $error = $original->Composite(
        image=>$watermark,
        compose=>"dissolve",
    #    args => "90",
        opacity=>"2%",
        gravity=>"South"
    );
    die "Cannot do composite: $error" if $error;
}    
{
    my $error = $original->Write( 'new.jpg' );
    die "Cannot write new.jpg: $error" if $error;
}
say "Done.";

它给了我:

所以你可以看到水印已经被合成到原始文件中了。所以也许opacity参数可以这样使用?

相关问题