我需要创建480w x 360h像素“画布”内的图像。
我确实从我的远程网址创建了一些图片,在stackoverflow的帮助下没问题。
然而,我希望保持图像的宽高比,但最终结果是480x360 ..因此,需要使用“画布”或边框然后裁剪技术(从我读过的)但是,我不能好像是开始了。
这就是我所拥有的:
#!/usr/bin/perl
use Image::Resize;
use Image::Magick;
use strict;
my $new = 'path/to/image/image.jpg';
my $somewords = 'Some words';
my $imageurl='http://myimageurl.com/image.jpg';
my $p = new Image::Magick;
$p->Read("$imageurl");
my ($origw, $origh) = $p->Get('width', 'height');
#### correct size images get processed here with just annotation ########
if (($origw == 480) && ($origh == 360)){
system("convert $imageurl -fill '#FFFFFF' -font Candice -pointsize 12 -undercolor '#00000080' -gravity SouthEast -annotate +1+1 '$somewords' $new");
}
#### process images of incorrect original size WHERE I AM STUCK #######
if (($origw != 480) && ($origh != 360)){
system("convert $imageurl $new");
system("convert $imageurl -resize 480x360\! -fill '#FFFFFF' -font Candice -pointsize 14 -undercolor '#00000080' -gravity SouthWest -annotate +1+1 '$somewords' $new");
}
我需要的是:
“画布”尺寸为480 x 360。
将原始图像从网址缩小至480w或360h的正确宽高比,并将其放置在480x360画布的中间。
我读到的地方,没有提供任何示例,我可以调整原始图像的大小,同时保持纵横比正确的高度或宽度,无论哪个允许图像最大,然后将另一个参数(h或w)除以2,然后制作根据它添加边框,然后裁剪到大小。混淆了“他+双曲棍球棒”。
我很想弄明白这一点。我甚至不确定我的问题是否清楚,值得问一下stackoverflow。
似乎在保持宽高比的同时调整大小,同时创建固定的输出图像非常困难!几个小时的搜索没有帮助我。
我称赞提供详细解决方案的人。感谢。
答案 0 :(得分:3)
使用Image::Magick
模块,然后使用外部convert
命令是不是有点傻?您可以使用Image::Magick
在Perl脚本中完成所有这些操作。
无论如何,如果您阅读fine manual,您会发现ImageMagick会调整到480x360以内的最高尺寸,而不会使用480x360
更改宽高比。这适用于convert
和Image::Magick
内的命令行。当您添加!
时,您告诉它将调整为精确到480x360,而忽略宽高比。
这可以让你在不使用外部命令的情况下开始使用:
...
$p->Resize(geometry=>'480x360');
$p = $p->Montage(geometry=>'480x360', background=>'black', fill=>'white',
stroke=>'white', pointsize=>12, title=>$somewords);
$p->Write($new);
...
答案 1 :(得分:0)
获得相同宽高比的最简单方法是计算和缩放百分比。 ImageMagick允许您使用几何的百分比进行缩放。 IE,
convert -geometry 25%x25%file1.jpg file2.jpg
请注意,您可以在不调用system()的情况下完成所有这些操作,尽管system()可能更容易启动,然后将其转换为内部的Image :: Magick API调用。