Image :: Magick画出一个模糊的圆圈

时间:2014-07-01 16:19:24

标签: perl imagemagick perlmagick

拥有背景图片。 (对于此示例,mesh.png

对图像需要添加一个圆圈,边框模糊。目前有这个:

use 5.014;
use warnings;
use Image::Magick;

my $bgimg = Image::Magick->new();
$bgimg->Read('png:mesh.png');

draw_my_circle($bgimg, 150, 150, 100);  #img, center_x, center_y, radius
$bgimg->Write("win:");  #display

sub draw_my_circle {
    my($img, $center_x, $center_y, $radius) = @_;
    $img->Draw(
        fill => 'black',
        points => "$center_x,$center_y @{[$center_x + $radius]},$center_y",
        primitive => 'circle',
    );
}

这会产生下一张图像:

black circle on a mesh

但是我需要一个带有“模糊边缘”的圆圈,就像下一个(手动创建)

一样

blurred circle on the mesh

任何人都可以通过Image::Magick帮助如何获得这样一个模糊的圈子吗?

如果有人想要mesh.png,则会使用下一个脚本创建它:

use 5.014;
use warnings;
use Image::Magick;

my $image=Image::Magick->new(size=>'300x300');
$image->Read('xc:white');

for( my $i=0; $i < 300; $i += 10 ) {
    $image->Draw(primitive=>'line',points=>"$i,0 $i,300",stroke=>"#ccf");
    $image->Draw(primitive=>'line',points=>"0,$i 300,$i",stroke=>"#ccf");
}
$image->Write('png:mesh.png');

1 个答案:

答案 0 :(得分:3)

您可以使用高斯模糊,如下所示:

#!/usr/bin/perl
use 5.014;
use strict;
use warnings;
use Image::Magick;
my $x;
my $circle;
my $mesh;

$mesh=Image::Magick->new(size=>'300x300');
$mesh->Read('xc:white');

for( my $i=0; $i < 300; $i += 10 ) {
    $mesh->Draw(primitive=>'line',points=>"$i,0 $i,300",stroke=>"#ccf");
    $mesh->Draw(primitive=>'line',points=>"0,$i 300,$i",stroke=>"#ccf");
}
$mesh->Write(filename=>'mesh.png');

$circle=Image::Magick->new(size=>'300x300');
$circle->ReadImage('xc:transparent');
$circle->Draw(
        fill => 'black',
        points => "150,150 @{[250]},100",
        primitive => 'circle',
    );
$circle->GaussianBlur('10x50');
$circle->Write(filename=>'circle.png');

$mesh->Composite(image => $circle, qw(compose SrcAtop  gravity Center));
$mesh->Write(filename=>'out.png');