如何在imagemagick中将base64-encode图像转换为PNG?

时间:2013-08-22 07:27:23

标签: c++ image-processing imagemagick png base64

我有base64编码数据。例如data:image/png;base64,R0lGODlhIA...,我想用Magick ++将其转换为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-encode数据非常大时,代码行input_image.read(input_blob);将崩溃。

有人能告诉我代码是否正确或如何在magick ++中将base64-encode数据转换为PNG?

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

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

选项:

  • 将和decode base64数据解析为二进制blob,并传递给ImageMagick :: Image
  • 将数据写入temporary file,并使用inline:前缀

实施例:

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