首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换base64图像?

如何转换base64图像?
EN

Stack Overflow用户
提问于 2015-09-21 14:58:19
回答 2查看 9.4K关注 0票数 12

我正在尝试使用来自ImageMagick的“转换”命令行工具。我有一个base64编码的png文件,我需要将它转换成另一种格式。我正在查看文档论坛讨论,这表明我应该能够使用以下语法:

代码语言:javascript
复制
convert inline:file.txt file.jpg

但是当我这样做的时候,我会得到这样的错误信息:

代码语言:javascript
复制
convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 18:34:29

最新的答案--现在我已经更好地理解了它:-)

基本上,您可以使用这样的base64使用openssl对图像进行编码:

代码语言:javascript
复制
openssl enc -base64 -in image.png > image.b64

但是,如果您希望ImageMagick能够读取它,那么在开始时需要一个小的标题,告诉ImageMagick下面的内容。标题必须包含:

代码语言:javascript
复制
data:image/png;base64,

然后是使用上面的base64命令生成的openssl编码数据。因此,根据shell所具有的特性,可以使用bash中的复合语句这样做

代码语言:javascript
复制
{ echo "data:image/png;base64,"; openssl enc -base64 -in input.png; } > image.b64

在Windows中是这样的:

代码语言:javascript
复制
echo data:image/png;base64,         > image.b64
openssl enc -base64 -in image.png  >> image.b64

有了这种格式的图像之后,就可以使用ImageMagick进行处理了,如下所示:

代码语言:javascript
复制
convert inline:image.b64 result.png

对于在css中使用此标记的用户,请将-A标志添加到一行中输出。

代码语言:javascript
复制
openssl enc -base64 -A -in image.png > image.b64

原始答案

经过多次试验,我可以做到!

从Eric's (@emcconville)设置开始:

代码语言:javascript
复制
# For example
convert rose: rose.png
# Create base64 file
openssl enc -base64 -in rose.png -out rose.txt

现在把这个烂摊子加到最后一行:

代码语言:javascript
复制
{ echo "data:image/png;base64,"; cat rose.txt; } | convert inline:- out.jpg

我想data:image/png;base64,不存在于openssl创建的base64文件中,所以我创建了一个复合语句,该语句将该复合语句加上该文件发送到stdin of ImageMagick

票数 15
EN

Stack Overflow用户

发布于 2015-09-21 16:34:43

最新答案

从ImageMagick 格式文档..。

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

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

代码语言:javascript
复制
# 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文件中可能有空格。如果是这样的话,实用程序就可以工作了。

代码语言:javascript
复制
# 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.jpg
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32698451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档