Domanda

Ho un'immagine che ho manipolato con GD :: Immagine e voglio fare ulteriori manipolazioni con :: Magick . Vorrei evitare di scrivere l'immagine su disco solo così immagine :: Magick può leggere in. Funzione Leggi di immagine :: Magick accetterà un filehandle come parametro, quindi sto cercando di passare un :: Scalar IO oppongo ho creato con l'uscita dal GD :: immagine.

Tuttavia, dal momento che un oggetto Scalar IO :: può essere trattata come una stringa, sembra immagine :: Magick è interpretare il contenuto dell'immagine come un nome di file, che non riesce a trovare, e Read () non riesce.

C'è un altro modo per creare un filehandle da uno scalare che si comporta più come un filehandle normale, o c'è un altro modo più semplice per realizzare quello che sto cercando di fare qui?

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

$ risposta è:

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

Soluzione

Credo che siete alla ricerca di 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__

Altri suggerimenti

Dalla documentazione ...

  

Per leggere un'immagine in formato GIF   da un filehandle Perl, utilizzare:

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

Quindi ... penso che un riferimento al filehandle (\$FH) nel vostro esempio, invece di filehandle, dovrebbe fare il trucco?

Modifica: Per rispondere a brian d foy, questo è quello che stavo cercando suggerendo:

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

Sul mio sistema, almeno, questo seg errori.

ti lascio questo post presentarsi come un esempio di ciò che non funziona. : P

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top