我使用Perl的Image :: Magick创建了一个缩略图,但是我想将它发送回客户端内部的一个JSON对象Base64编码以进行显示。我怎么能得到Base64字符串,而不必将文件保存到磁盘?使用Base64编码ImageMagick图像
回答
难道你不能把一个标量当作文件句柄吗?
http://metacpan.org/pod/IO::Scalar
my $image_data;
my $fh = IO::Scalar->new(\$image_data);
$thumbnail->Write(file=> $fh, filename=>'thumbnail.jpg');
## Then as in the previous answer...
my $json = JSON->new->utf8;
my $client_data = {
thumbnail => encode_base64($image_data),
other_crap => 'poo',
};
my $encoded_client_data = $json->encode($client_data);
编辑(C/F How can I use IO::Scalar with Image::Magick::Read()?)
如何:
http://www.imagemagick.org/script/perl-magick.php#blobs
与斑点
工作10Blob包含的数据直接表示内存中的特定图像格式 而不是磁盘上的数据。 PerlMagick支持这些图像格式的 中的任何一个blob,并提供将blob转换为特定图像格式或从 转换为特定图像格式的方法。
...
ImageToBlob()以各自的格式返回图像数据。 然后,您可以打印出来,保存到ODBC数据库,将其写入 文件或管道它来显示程序:
@blobs = $image->ImageToBlob();
open(DISPLAY,"| display -") || die;
binmode DISPLAY;
print DISPLAY $blobs[0];
close DISPLAY;
所以你想要的东西,如:
my ($image_data) = ($image->ImageToBlob())[0];
my $json = JSON->new->utf8;
my $client_data = {
thumbnail => encode_base64($image_data),
other_crap => 'poo',
};
my $encoded_client_data = $json->encode($client_data);
更新:
貌似这里所说的没有与图像工作的东西:: Magick。
此外,它看起来像Oesor发现与ImageToBlob()
正确的东西。
假设你有一个标量的二进制数据,使用MIME :: Base64编码用于编码的二进制。然后使用JSON或JSON :: XS创建JSON结构。
MIME :: Base64是一个核心模块。你应该已经有了。 JSON和朋友们都很有用,你应该安装其中一个。
use MIME::Base64 qw<encode_base64>;
use JSON;
my $image_data = 'blah';
my $json = JSON->new->utf8;
my $client_data = {
thumbnail => encode_base64($image_data),
other_crap => 'poo',
};
my $encoded_client_data = $json->encode($client_data);
更新:
我没有看到暴露用于直接访问的任何方法,但你可能能够通过手柄脱身开了一个标量裁判的Write()
方法。
my $image_data;
open my $fh, '>', \$image_data;
$im->Write($fh);
# $image_data now should have the raw binary data.
对不起,如果我的问题有点混乱,但我知道如何编码的东西到Base64,我想知道的是如何从ImageMagick获取二进制数据而不保存图像到磁盘。 –
- 1. 使用javascript编辑base64编码图像
- 2. Base64编码图像
- 3. Base64编码图像
- 4. 使用java的base64图像编码
- 5. 使用Base64编码图像的空值
- 6. 验证Base64编码图像
- 7. PHP Alter Base64编码图像
- 8. 验证base64编码图像
- 9. base64编码图像大小
- 10. Phonegap编码图像base64
- 11. 使用imagemagick从Meteor中的base64字符串中读取图像使用imagemagick
- 12. 将Base64编码图像加密为另一个有效的Base64编码图像
- 13. 如何解码使用base64编码的图像字符串
- 14. 使用java解码Base64编码图像的颜色信息
- 15. 如何解码由window.btoa使用Java编码的base64图像
- 16. 解码Base64图像
- 17. 解码Base64图像
- 18. Django的保存Base64编码图像
- 19. 无法显示Base64编码图像
- 20. base64编码图像的WCF服务
- 21. Base64编码和观看图像
- 22. iPhone base64编码图像异步下载
- 23. PHP验证base64编码图像
- 24. PHP:编码图像Base64本地
- 25. 获取损坏的Base64编码图像
- 26. Base64从编码到显示的图像
- 27. 发送/显示base64编码图像
- 28. 将图像编码为Amazon S3的Base64
- 29. Swift 3 base64编码图像上传
- 30. 如何下载base64编码的图像?
不需要IO :: Scalar,只需使用'open'。 – daotoad
你的方法和@daotoad方法不起作用,我尝试了'$ thumbnail-> Write'的每一种可能的组合,并且它们都没有写入'$ image_data',但是当你省略'filename'(所以它不写到文件)它将所有内容打印到'STDOUT'。 –
由于某种原因,我忘记了这个简写并正在查看IO :: *模块。 – Oesor