Imagemagick 如何转换base64映像?
我正在尝试使用ImageMagick中的“convert”命令行工具。我有一个base64编码的png文件,我需要将其转换为另一种格式。我正在查看和a,这表明我应该能够使用以下语法: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图像文件?
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请根据需要简化。