Как я могу использовать IO :: Scalar с Image :: Magick :: Read ()? - PullRequest
2 голосов
/ 22 мая 2009

У меня есть изображение, которым я манипулировал с GD :: Image , и я хочу сделать дальнейшие манипуляции с Image :: Magick . Я бы хотел избежать записи изображения на диск, чтобы Image :: Magick мог его прочитать. Функция чтения Image :: Magick примет файловый дескриптор в качестве параметра, поэтому я пытаюсь передать ему 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);

$ ответ:

"Exception 435: unable to open image `????': No such file or directory"

Ответы [ 2 ]

10 голосов
/ 22 мая 2009

Я думаю, что вы ищете 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__
0 голосов
/ 22 мая 2009

Из документов ...

Чтобы прочитать изображение в формате GIF из дескриптора файла Perl используйте:

$image = Image::Magick->new;
open(IMAGE, 'image.gif');
$image->Read(file=>\*IMAGE);
close(IMAGE);

Итак ... Я думаю, что ссылка на ваш файловый дескриптор (\$FH) в вашем примере, а не просто файловый дескриптор, должна сработать?

Редактировать: чтобы ответить Брайану Дой Фой, вот что я предлагал попробовать:

my $image = Image::Magick->new;
open my $fh, 'image.gif';
binmode $fh;
$image->Read( file => \$fh );
close $fh;

В моей системе, по крайней мере, эта ошибка сега.

Я оставлю этот пост в качестве примера того, что не работает. : P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...