簡體   English   中英

如何在Image :: Magick :: Read()中使用IO :: Scalar?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM