我正在尝试使用来自ImageMagick的“转换”命令行工具。我有一个base64编码的png文件,我需要将它转换成另一种格式。我正在查看文档和论坛讨论,这表明我应该能够使用以下语法:
convert inline:file.txt file.jpg但是当我这样做的时候,我会得到这样的错误信息:
convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910.我做错了什么?如何转换为读取base64图像文件?
发布于 2015-09-21 18:34:29
最新的答案--现在我已经更好地理解了它:-)
基本上,您可以使用这样的base64使用openssl对图像进行编码:
openssl enc -base64 -in image.png > image.b64但是,如果您希望ImageMagick能够读取它,那么在开始时需要一个小的标题,告诉ImageMagick下面的内容。标题必须包含:
data:image/png;base64,然后是使用上面的base64命令生成的openssl编码数据。因此,根据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进行处理了,如下所示:
convert inline:image.b64 result.png对于在css中使用此标记的用户,请将-A标志添加到一行中输出。
openssl enc -base64 -A -in image.png > image.b64原始答案
经过多次试验,我可以做到!
从Eric's (@emcconville)设置开始:
# For example
convert rose: rose.png
# Create base64 file
openssl enc -base64 -in rose.png -out rose.txt现在把这个烂摊子加到最后一行:
{ echo "data:image/png;base64,"; cat rose.txt; } | convert inline:- out.jpg我想data:image/png;base64,不存在于openssl创建的base64文件中,所以我创建了一个复合语句,该语句将该复合语句加上该文件发送到stdin of ImageMagick。
发布于 2015-09-21 16:34:43
最新答案
从ImageMagick 格式文档..。
内联图像看起来类似于
inline:data:;base64,/9j/4AAQSk...knrn//2Q==。如果内联图像超过5000个字符,请从文件(例如inline:inline.txt)中引用它。
这暗示了在使用内联格式时有两个“抓到”。首先,任何标准的base64空白(unix换行)都应该删除,以便所有信息都在一行上。其次,任何超过5000个字符的数据都应该从文件缓冲区中读取。
# Copy data to new file, striping line-breaks & adding INLINE header. (Please advise better sed/awk.)
cat file.txt | tr -d "\r\n" | awk '{print "data:image/png;base64,"$1}' > file.inline
# Read file as expected
convert inline:file.inline file.jpg原版(不完全正确)回答
“损坏的图像”消息告诉我,base64文件中可能有空格。如果是这样的话,树实用程序就可以工作了。
# For example
convert rose: rose.png
# Create base64 file
openssl enc -base64 -in rose.png -out rose.txt
# Read inline & data from stdin -- after stripping whitespace
cat rose.txt | tr -d "\r\n" | convert inline:data:- out.jpghttps://stackoverflow.com/questions/32698451
复制相似问题