我正在使用 Perl 和 ImageMagick (Perl-API)。在第一步中,我采用图像的矩形并模糊图像的这一部分(加上该矩形的旋转)。感谢 Mark Setchell,这可以进一步发挥作用(请参阅此处的 stackoverflow 问题:How to blur/pixelate part of an image using ImageMagick?)。
现在我的目标是用更大的像素来模糊该图像的矩形。我怎样才能做到这一点?
这是我到目前为止使用的 Mark Setchell 的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
my $x;
my $image;
my $blurred;
my $mask;
# Create original fishscale image
$image=Image::Magick->new(size=>'600x300');
$image->Read('pattern:fishscales');
$image->Write(filename=>"1.png");
# Copy original image and blur
$blurred = $image->Clone();
$blurred->GaussianBlur('x2');
$blurred->Write(filename=>"2.png");
# Make mask and rotate
$mask=Image::Magick->new(size=>'600x300');
$mask->Read('xc:white');
$mask->Draw(fill=>'black',primitive=>'rectangle',points=>'100,100,200,200');
$mask->Set('virtual-pixel'=>'white');
$mask->Rotate(20);
$mask->Transparent('white');
$mask->Write(filename=>"3.png");
# Copy mask as alpha channel into blurred image
$blurred->Composite(image=>$mask,qw(compose CopyOpacity gravity center));
# Composite blurred image onto original
$image->Composite(image=>$blurred);
$image->Write(filename=>'result.png');
更新:仍然存在一个问题:
它适用于没有旋转的选定矩形。但如果我应用一个角度,我会得到奇怪的结果。像素化的区域不是我定义的区域,但是当我选择远离图像中间的矩形和/或增加角度时,它的差异越大。
请参阅下面的图像,其中选择了不同的矩形以及像素化的区域。我使用了 45 度角。
知道这里有什么问题吗?(也许是“撰写 CopyOpacity 重心”)