如何使用ImageMagick模糊/像素化图像的一部分?

如何使用ImageMagick模糊/像素化图像的一部分?,image,perl,image-processing,imagemagick,blur,Image,Perl,Image Processing,Imagemagick,Blur,我正在使用Perl和ImageMagick(PerlAPI)。 在第一步,我想采取一个矩形的图像和模糊这一部分的图像。理想的结果是矩形模糊的原始图像 在第二步中,我需要用旋转的矩形(即旋转35%)模糊图像的一部分 我如何才能做到这一点?我能想到的最好方法是利用遮罩来模糊图像。这将允许您“绘制”一个形状,并通过要模糊的对象 例如: # Create base image convert rose: -sample 200x rose_large.png 其他技术和示例。我不熟悉Perl

我正在使用Perl和ImageMagick(PerlAPI)。 在第一步,我想采取一个矩形的图像和模糊这一部分的图像。理想的结果是矩形模糊的原始图像

在第二步中,我需要用旋转的矩形(即旋转35%)模糊图像的一部分


我如何才能做到这一点?

我能想到的最好方法是利用遮罩来模糊图像。这将允许您“绘制”一个形状,并通过要模糊的对象

例如:

 # Create base image
 convert rose: -sample 200x rose_large.png

其他技术和示例。我不熟悉PerlAPI,但应该有一个接受图像处理程序参数的
Mask
方法

使现代化 对于矩形,只需更新要在遮罩上绘制的形状。这里有一个例子,我只是模糊了矩形里面的东西

# Create rectangle mask
convert -size 200x131 xc:white -fill black -draw 'rectangle 50 30 150 100' rose_rectangle_mask.png


我能想到的最好方法是利用遮罩来模糊图像。这将允许您“绘制”一个形状,并通过要模糊的对象

例如:

 # Create base image
 convert rose: -sample 200x rose_large.png

其他技术和示例。我不熟悉PerlAPI,但应该有一个接受图像处理程序参数的
Mask
方法

使现代化 对于矩形,只需更新要在遮罩上绘制的形状。这里有一个例子,我只是模糊了矩形里面的东西

# Create rectangle mask
convert -size 200x131 xc:white -fill black -draw 'rectangle 50 30 150 100' rose_rectangle_mask.png


当您要求PerlMagick时,我拔出了最后几根头发,试图用Perl实现这一点。。。文件
1.png
2.png
3.png
纯粹是为了调试,所以您可以看到我在做什么

#!/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');
以下是调试图像

1.png

2.png

3.png

result.png

也许有一种更快、更简单、更有效的方法可以做到这一点,但我不知道这一点,而且也有一些珍贵的PerlMagick的例子,所以我将把我的标记放在沙子里,看看是否有人能做得更好:-)


另外,不要为我的头发感到难过——反正只剩下三根了:-)

当你要求PerlMagick时,我把剩下的几根头发拔了出来,尝试用Perl做这件事。。。文件
1.png
2.png
3.png
纯粹是为了调试,所以您可以看到我在做什么

#!/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');
以下是调试图像

1.png

2.png

3.png

result.png

也许有一种更快、更简单、更有效的方法可以做到这一点,但我不知道这一点,而且也有一些珍贵的PerlMagick的例子,所以我将把我的标记放在沙子里,看看是否有人能做得更好:-)



注意:不要为我的头发感到难过-反正只剩下三个了:-)

如果是矩形而不是球体,这个示例(纯imagemagick命令)会是什么样子?另一个选择可能是使用区域
convert rose_large.png-区域100x60+10+30-模糊0x8结果。png
0x8代表什么?@Thariama
0x8
是模糊选项,代表
RADIUS x SIGMA
。See docs 0X8是获取最大模糊值的最大值吗?如果是矩形而不是球体,此示例(纯imagemagick命令)会是什么样子?另一个选项可能是使用区域
convert rose_large.png-区域100x60+10+30-模糊0x8结果。png
0x8代表什么?@Thariama
0x8
是模糊选项,代表
RADIUS x SIGMA
。See docs 0X8是获得最大模糊度的最大值吗?除非您有许多文件需要以相同的方式进行处理,否则最好安装GNU图像处理程序并执行它manually@Borodin:不是选项,我需要我们基于web的CMS中内置的功能。如果您有许多文件需要以相同的方式进行处理,那么您最好安装GNU图像处理程序并执行它manually@Borodin:不是选项,我需要基于web的CMSplus 1中内置的功能,并接受答案。非常感谢你,这让我很开心。顺便说一句,我没有太多的头发了。十八:你知道一种方法可以用更大的像素对整个事情进行像素化吗(上面的解决方案是完美的,但我只是认为用更大的模糊像素而不是小的模糊像素可能很好)?为此,我创建了一个新的stackoverflow问题:加1,答案被接受。非常感谢你,这让我很开心。顺便说一句,我的头发不多了。十八:你知道一种方法可以用更大的像素作为结果对整个事情进行像素化吗(上面的解决方案很完美,但我只是认为用更大的模糊像素而不是小的模糊像素可能很好)?为此,我提出了一个新的stackoverflow问题: