[英]How can I use IO::Scalar with Image::Magick::Read()?
我有一個用GD :: Image操縱的圖像 ,我想用Image :: Magick做進一步的操作。 我想避免將圖像寫入磁盤,因此Image :: Magick可以讀取它.Image :: Magick的Read函數將接受一個文件句柄作為參數,所以我試圖將它傳遞給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"
我想你正在尋找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__
要從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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.