我正在开发一个程序,以使用Image::Magick为产品图像动态添加水印。我正在使用composite
该dissolve
方法。水印图像是具有透明度的 PNG。它在 Linux 上运行,带有ImageMagick 6.7.6-9 2012-05-16 Q16
.
考虑以下任意示例图像:
背景(test.jpg
):
水印/覆盖 ( example.png
):
如果我将这些与命令行工具放在一起composite
,一切都很好。
composite -dissolve 60% -gravity center example.png test.jpg out.jpg
文本(这需要是图像,其中也将包含图形)叠加在背景上。边缘就是它们在原始水印图像中的样子。
#!/usr/bin/perl
use strict; use warnings;
use Image::Magick;
# this objects represents the background
my $background = Image::Magick->new;
$background ->ReadImage( 'test.jpg' );
# this objects represents the watermark
my $watermark = Image::Magick->new;
$watermark->ReadImage( 'example.png');
# there is some scaling going on here...
# both images are scaled down to have the same width
# but the problem occurs even if I turn the scaling off
# superimpose the watermark
$background->Composite(
image => $watermark,
compose => 'Dissolve',
opacity => '60%',
gravity => 'Center',
);
$background->Write( filename => 'out.jpg' );
这是这个 Perl 程序的输出:
如您所见,新图像有一些奇怪的边缘,几乎就像一个轮廓。该图像越大(原始源图像都> 1000px),该轮廓变得越明显。
这是一个特写:
我相信这可能与 JPEG 压缩的强度有关,因为错误的图像有更多的伪像。但这意味着 Perl 的 Image::Magick 和 CLI 的默认值是不同的。我还没有弄清楚如何设置压缩。
无论如何,我很高兴收到任何关于为什么会发生这种情况的意见,或者关于如何摆脱它的想法和建议。