Pergunta

Eu tenho uma imagem que eu ter manipulado com GD :: Imagem e eu quero fazer outras manipulações com imagem :: Magick . Eu gostaria de evitar escrever a imagem para o disco tão Imagem :: Magick pode lê-lo no. Imagem :: função Read da Magick aceitará um filehandle como um parâmetro, então eu estou tentando passá-lo um IO :: Scalar objeto que eu criei com a saída do GD :: imagem.

No entanto, uma vez que um objeto IO :: escalar pode ser tratado como uma string, ele se parece com o Image :: Magick está interpretando o conteúdo da imagem como um nome de arquivo que não pode encontrar, e Read () falhar.

Existe outra maneira de criar um filehandle de um escalar que se comporta mais como um filehandle regular, ou há outra maneira mais simples de realizar o que eu estou tentando fazer aqui?

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

$ resposta é:

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

Solução

Eu acho que você está procurando 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__

Outras dicas

De docs ...

Para ler uma imagem no formato GIF a partir de um filehandle Perl, use:

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

Então ... Eu acho que uma referência ao seu filehandle (\$FH) no seu exemplo, em vez de apenas o filehandle, deve fazer o truque?

Edit: Para responder a brian d foy, é isso que eu estava sugerindo tentar:

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

No meu sistema, pelo menos, este falhas seg.

Eu vou deixar este post ficar como um exemplo do que não funciona. : P

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top