Imagemagick 如何转换base64映像?

Imagemagick 如何转换base64映像?,imagemagick,imagemagick-convert,tr,Imagemagick,Imagemagick Convert,Tr,我正在尝试使用ImageMagick中的“convert”命令行工具。我有一个base64编码的png文件,我需要将其转换为另一种格式。我正在查看和a,这表明我应该能够使用以下语法: convert inline:file.txt file.jpg 但当我这样做时,我会收到以下错误消息: convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910. 我做错了什么?如何获取转换以读取base64图像文件?

我正在尝试使用ImageMagick中的“convert”命令行工具。我有一个base64编码的png文件,我需要将其转换为另一种格式。我正在查看和a,这表明我应该能够使用以下语法:

convert inline:file.txt file.jpg
但当我这样做时,我会收到以下错误消息:

convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910.

我做错了什么?如何获取转换以读取base64图像文件?

更新的答案

从ImageMagick

内联图像看起来类似于
inline:data:;base64,/9j/4AAQSk…knrn//2Q==
。如果内联图像超过5000个字符,请从文件中引用它(例如
inline:inline.txt

这提示在使用内联格式时有两个“gotcha”。首先,应删除任何标准的base64空格(unix换行符),以便所有信息都在一行上。第二,任何超过5000个字符的数据都应该从文件缓冲区中读取

#将数据复制到新文件,分条换行并添加内联标题。(请告知更好的sed/awk。)
cat file.txt | tr-d“\r\n”| awk'{print”数据:image/png;base64,“$1}'>file.inline
#按预期读取文件
转换内联:file.inline file.jpg
原始(并非真正正确)答案

“损坏图像”消息告诉我base64文件中可能有空白。如果是这样的话,这个实用程序就可以工作了

例如,
#
转换玫瑰:rose.png
#创建base64文件
openssl enc-base64-in-rose.png-out-rose.txt
#从stdin读取内联数据&在去除空白之后
cat rose.txt | tr-d“\r\n”|转换内联:数据:-out.jpg

更新的答案-现在我自己更了解了:-)

基本上,您可以使用
openssl
对图像进行base64编码,如下所示:

openssl enc -base64 -in image.png > image.b64
convert inline:image.b64 result.png
但是,如果您希望
ImageMagick
能够读取它,则需要在开始时使用一个小标题,告诉
ImageMagick
接下来的内容。标题必须包含:

data:image/png;base64,
然后是使用上面的
openssl
命令生成的base64编码数据。因此,根据shell的功能,您可以通过
bash
中的复合语句来实现:

{ echo "data:image/png;base64,"; openssl enc -base64 -in input.png; } > image.b64
或者类似于Windows中的:

echo data:image/png;base64,         > image.b64
openssl enc -base64 -in image.png  >> image.b64
一旦获得该格式的图像,您就可以继续使用
ImageMagick
处理它,如下所示:

openssl enc -base64 -in image.png > image.b64
convert inline:image.b64 result.png
对于在css中使用此选项的用户,请在一行中添加
-A
标志以输出

openssl enc -base64 -A -in image.png > image.b64
原始答案

经过多次试验,我能做到!!!:-)

从Eric的(@emcconville)设置开始:

现在将此混乱添加为最后一行:

{ echo "data:image/png;base64,"; cat rose.txt; } | convert inline:- out.jpg

我猜
数据:image/png;base64,
在由
openssl
创建的base64文件中不存在,因此我创建了一个复合语句,将其与文件一起发送到
ImageMagick

stdin
,我担心这会给我基本相同的错误:“convert:corrupt image`data:-'@error/compose.c/ReadInlineImage/910。”除了行尾(unix)之外,我在原始文件中看不到任何空白。您能从新映像中重新创建相同的消息吗?是的,我使用的任何base64映像都能看到它。我不明白该语法应该如何使用,否则它根本不起作用。在网上找不到任何关于如何使用convert读取base64图像文件的明确示例。好的,更新了答案@MarkSetchell请根据需要简化。