如何在Image :: Magick :: Read()中使用IO :: Scalar?

Rya*_*son 2 perl imagemagick

我有一个用GD :: Image操纵的图像,我想用Image :: Magick做进一步的操作.我想避免将图像写入磁盘,因此Image :: Magick可以读取它.Image :: Magick的Read函数将接受一个文件句柄作为参数,所以我试图将它传递给IO :: Scalar我用GD :: Image的输出创建的对象.

但是,由于IO :: Scalar对象可以被视为字符串,因此看起来Image :: Magick将图像内容解释为无法找到的文件名,而Read()失败.

是否有另一种方法从标量创建一个文件句柄,其行为更像常规文件句柄,还是有另一种更简单的方法来完成我在这里尝试做的事情?

my $FH = new IO::Scalar \$image_bin;
my $magick = Image::Magick->new;
my $response = $magick->Read(file => $FH);
Run Code Online (Sandbox Code Playgroud)

$回复是:

"Exception 435: unable to open image `????': No such file or directory"
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 10

我想你正在寻找BlobToImage:

#!/usr/bin/perl

use strict;
use warnings;

use File::Slurp;
use Image::Magick;

my $image_bin = read_file 'test.jpg', binmode => ':raw';

my $magick = Image::Magick->new;

$magick->BlobToImage( $image_bin );

$magick->Resize( geometry => '64x64' );

$magick->Write( 'test-out.jpg' );

__END__
Run Code Online (Sandbox Code Playgroud)