2013-08-22 213 views
0

我有一个base64编码数据。例如data:image/png;base64,R0lGODlhIA...,我想用Magick ++将它转换成PNG。这是我的代码:如何将base64-encode图像转换为imagemagick中的PNG图像?

std::string data = "data:image/png;base64,R0lGODlhIA..."; 
std::string output;  //this is the output PNG data 
Magick::Blob input_blob((void*) data.c_str(), data.length()); 
Magick::Image input_image; 
input_image.magick("INLINE"); 
input_image.read(input_blob); 

Magick::Blob output_blob; 
input_image.write(&output_blob, "PNG"); 
output.assign((char*) output_blob.data(), output_blob.length()); 

代码工作,但是当以base64编码的数据是非常大的,代码行input_image.read(input_blob);会崩溃。

谁能告诉我代码是否正确或如何将base64编码数据转换为magick ++中的PNG?

任何帮助表示赞赏!

回答

2

Inline image format要求超过5000个字符的数据从文件中引用,并且不能直接读取为blob数据。

选项:

  • 解析和decode base64数据转换成二进制团块,并传递到ImageMagick的::图片
  • 数据写入temporary file,并使用inline:前缀

实施例:

input_image.read("inline:/path/to/base64.txt"); 
+0

Th谢谢你,我使用第一种方法,它的工作原理。 – jseanj