3

GD::Imageで操作した画像があり、さらにImage::Magickで操作したいと考えています。Image::Magick が読み込むことができるように、イメージをディスクに書き出すことは避けたいと思います。 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"
4

2 に答える 2

11

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__
于 2009-05-22T19:52:23.583 に答える
0

ドキュメントから...

Perl ファイルハンドルから GIF 形式の画像を読み取るには、次を使用します。

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

だから...\$FHあなたの例では、ファイルハンドルだけでなく、ファイルハンドル()への参照がうまくいくと思いますか?

編集:brian d foyに対応するために、これは私が試してみることを提案していたことです:

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

私のシステムでは、少なくとも、このセグメントは失敗します。

この投稿は、うまくいかない例として立てておきます。:P

于 2009-05-22T19:51:12.480 に答える