Question

J'ai une image que je l'ai manipulé avec GD :: image et je veux faire d'autres manipulations avec :: Magick . Je voudrais éviter d'écrire l'image sur le disque juste pour que l'image :: Magick peut le lire dans. La fonction de lecture de l'image :: Magick acceptera un descripteur de fichier comme paramètre, donc je suis en train de passer un IO :: Scalar objet que je crée avec la sortie de GD :: image.

Cependant, comme un IO :: objet Scalar peut être traitée comme une chaîne, il ressemble à l'image :: Magick interprète le contenu de l'image en tant que nom de fichier qui ne peut pas trouver, et Read () échoue.

Y at-il une autre façon de créer un descripteur de fichier à partir d'un scalaire qui se comporte plus comme un descripteur de fichier régulier, ou est-il une autre façon plus simple d'accomplir ce que je suis en train de faire ici?

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

$ response est:

"Exception 435: unable to open image `????': No such file or directory"
Était-ce utile?

La solution

Je pense que vous cherchez 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__

Autres conseils

De la documentation ...

  

Pour lire une image au format GIF   à partir d'un descripteur de fichier Perl, utilisez:

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

Alors ... Je pense qu'une référence à votre descripteur de fichier (\$FH) dans votre exemple, au lieu de simplement le descripteur de fichier, devrait faire l'affaire?

Edit: Pour répondre à brian d foy, c'est ce que je suggère d'essayer:

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

Sur mon système, au moins, ce défaut seg.

Je vais laisser ce poste servir d'exemple de ce qui ne fonctionne pas. : P

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top