如何使用convert命令在内存中调整图像大小

时间:2016-11-18 06:28:37

标签: perl imagemagick

我在ImageMagic中使用以下代码

use Image::Magick;
use Image::Magick::Square;

my $img_url = 'https://d2v48i7nl75u94.cloudfront.net/uploads/f1a14e1ce5028c34da667ec3f74416d8.jpeg';
my ($is_success, $status_line, $content, undef) = &HTTPRequest("GET", $img_url,  undef, undef, undef, undef, undef, undef, undef, undef, undef, 1, undef, undef, undef, undef, 30);
my $magick = Image::Magick->new;
$magick->BlobToImage( $content );
$magick->Scale('200x200');
$magick->Extent( gravity => 'Center', geometry => '200x200',background=>'white' );
my $img_content = $magick->ImageToBlob();
my $filename = "dev-tUJmYqP0q4-front-32604604-small.jpg";
$small_success = &S3Store("images/$filename", $img_content, "image/jpg");

反对导入" Image :: Magick" (上面的代码),我想使用这样的转换命令。

my $img_url = 'https://d2v48i7nl75u94.cloudfront.net/uploads/f1a14e1ce5028c34da667ec3f74416d8.jpeg';
$convert = `convert $img_url -resize 300x300 -gravity center -extent 200x200 -background white -alpha remove /tmp/$pre-$rand_id-thumb.jpg 2>&1`;

我试图避免通过命令将输出写入磁盘,然后将输出文件重新读入应用程序。 转换命令中有ImageToBlob吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你可以打开转换管道的输出作为文件句柄。

在你的情况下

my $img_url = 'https://d2v48i7nl75u94.cloudfront.net/uploads/f1a14e1ce5028c34da667ec3f74416d8.jpeg';
open( my $fh, 'convert $img_url -resize 300x300 -gravity center -extent 200x200 -background white -alpha remove jpeg:- 2>&1 |');
local $/;
$convert = <$fh>;

可能会完成这项工作。

HTH 乔治