【问题标题】:Perl - Image::Magick create specific size image "canvas" while maintaining aspect ratio of original image?Perl - Image::Magick 创建特定尺寸的图像“画布”,同时保持原始图像的纵横比?
【发布时间】:2011-01-26 08:10:01
【问题描述】:

我需要创建 480w x 360h 像素“画布”内的图像。

我确实从我的远程 url 创建了一些图像,在 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 的“画布”尺寸。

从 url 缩小原始图像以将宽高比调整为 480w 或 360h,并将其放置在 480x360 画布的中间。

我在某处读到,没有提供任何示例,我可以调整原始图像的大小,同时保持纵横比以校正高度或宽度,以允许图像最大,然后将另一个参数(h 或 w)除以 2,然后制作在此基础上添加边框,然后裁剪到大小。把“他+双曲棍球棒”弄糊涂了。

我很想弄清楚这一点。我什至不确定我的问题是否清楚,是否值得向 stackoverflow 提问。

似乎在创建固定输出图像的同时保持纵横比的同时调整大小非常困难!数小时的搜索对我没有帮助。

我赞扬提供详细解决方案的人。谢谢。

【问题讨论】:

    标签: perl resize imagemagick


    【解决方案1】:

    使用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);
    ...
    

    【讨论】:

      【解决方案2】:

      获得相同纵横比的最简单方法是按百分比计算和缩放。 ImageMagick 允许您使用几何图形的百分比进行缩放。即,

      转换 -geometry 25%x25% file1.jpg file2.jpg

      请注意,您也可以在不调用 system() 的情况下完成所有这些操作,尽管 system() 可能更容易让您开始,然后稍后将其转换为内部 Image::Magick API 调用。

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 2015-10-20
        • 2015-07-25
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2012-02-24
        相关资源
        最近更新 更多