【问题标题】:Image::Magick draw a blurred circle图片::Magick 画一个模糊的圆圈
【发布时间】:2014-08-22 07:06:08
【问题描述】:

有一张背景图片。 (对于这个例子,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',
    );
}

这会产生下一张图片:

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

任何人都可以帮助如何使用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');

【问题讨论】:

    标签: perl imagemagick perlmagick


    【解决方案1】:

    你可以像这样使用高斯模糊:

    #!/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');
    

    【讨论】:

    • 这会模糊整个图像(网格也是)。我只需要模糊圆的边缘,而不是背景图像。所以需要在“锐利”的背景图像上添加一个模糊的圆圈。 ;)
    • 哦,我明白了——对不起。请再看看!
    • 男人!你为我节省了很多时间。非常非常感谢你。 :) :) 如果可以的话 +10。
    • 我的荣幸 - 可能有更简单的方法,但我也只是在学习!
    • 感谢分享您的Image::Magick 技能。 +1
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2012-11-12
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多