我正在尝试剪切一幅图像并将其放置在另一幅图像上,就像蛋糕上的照片一样,我正在使用Perl并使用Image::Magick Perl库。

这是我能够生成的输出,我无法制作剪切图像的背景。下面是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
my $im = Image::Magick->new;
$im->Read('cake.jpg');
$im->Scale('50%');
my $sh = Image::Magick->new;
$sh->Set( magick => 'png' );
$sh->Read('oo.jpg');
$sh->Resize(width => 580, height => 540);
$sh->Shear( geometry => '580x540+0+0', x => -40, y => -30, 'virtual-pixel' => 'Transparent');
$im->Composite( image => $sh, geometry => '+90+60');
$im->Write('test.jpg');此外,我也看到一些使用AffineTransform的帖子,但使用这些帖子我无法实现切变。
发布于 2019-08-22 17:25:01
我通过创建一个蒙版(通过反转alpha通道)解决了这个问题。以下是代码,希望这能对某些人有所帮助:
use strict;
use warnings;
use Image::Magick;
my $im = Image::Magick->new;
$im->Read('cake.jpg');
$im->Scale('50%');
my $sh = Image::Magick->new;
$im->Set( magick => 'png' );
$sh->Set( magick => 'png' );
$sh->Read('oo.jpg');
$sh->Scale('50%');
## create a copy
my $sh1 = $sh->Clone();
## set alpha
$sh->Set('alpha' => 'Transparent');
## shear first
my $x = $sh->Shear( geometry => '290x270+0+0', x => -40, y => -30, fill => undef);
## invert to get a mask
$sh->Negate(channel => 'Alpha');
## shear copy
$x = $sh1->Shear( geometry => '290x270+0+0', x => -40, y => -30);
## apply mask
$sh1->Composite( compose => 'CopyOpacity', image => $sh);
$im->Composite( image => $sh1, geometry => '+450+260', );
$im->Write('test.jpg');最终图像:

https://stackoverflow.com/questions/57571226
复制相似问题