如何使用 PerlMagick “羽化”图像边缘

问题描述

我有一张图片 (JPEG),我想无缝地叠加在另一张图片上。如果我在 Photoshop 中尝试这样做,我会羽化边缘。但是我不知道如何使用 PerlMagick api 来实现这一点。我曾尝试使用 Vignette 创建一个模糊的边框,但这并不如我所愿。

use Image::Magick;

$file = 'background.jpg';
$image = Image::Magick->new;
open(IMAGE,$file ) or die "Error cannot open file: $file"; 
$image->Read(file=>\*IMAGE);
close(IMAGE);

$file = 'face.jpg';
$face = Image::Magick->new;
open(IMAGE,$file ) or die "Error cannot open file: $file"; 
$face->Read(file=>\*IMAGE);
close(IMAGE);

$face->Vignette (geometry=>'5x5',radius=>50,x=>5,y=>5,background=>none);

$image->Composite(image=>$face,compose=>'hardlight',geometry=>'+480+800');

print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpg:-');

解决方法

硬边是由 x=>5,y=>5,参数引起的。删除这些和半径值,图像将根据需要合并。强光与小插图过程相结合,创建了两个图像混合的区域。所以代码应该是:

use Image::Magick;

$file = 'background.jpg';
$image = Image::Magick->new;
open(IMAGE,$file ) or die "Error cannot open file: $file"; 
$image->Read(file=>\*IMAGE);
close(IMAGE);

$file = 'face.jpg';
$face = Image::Magick->new;
open(IMAGE,$file ) or die "Error cannot open file: $file"; 
$face->Read(file=>\*IMAGE);
close(IMAGE);

$face->Vignette (geometry=>'5x5',background=>none);

$image->Composite(image=>$face,compose=>'hardlight',geometry=>'+480+800');

print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpg:-');