如何转换base64图像?

ski*_*ppy 10 imagemagick imagemagick-convert

我正在尝试使用ImageMagick中的"convert"命令行工具.我有一个base64编码的png文件,我需要将其转换为另一种格式.我正在查看文档论坛讨论,这表明我应该能够使用这种语法:

convert inline:file.txt file.jpg
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到此错误消息:

convert: corrupt image `file.txt' @ error/constitute.c/ReadInlineImage/910.
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 11

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

基本上,您可以使用base64编码图像 openssl以下方式:

openssl enc -base64 -in image.png > image.b64
Run Code Online (Sandbox Code Playgroud)

但是,如果你想要ImageMagick能够阅读它,你需要在开始时使用一个小标题来告诉你ImageMagick后面的内容.标头必须包含:

data:image/png;base64,
Run Code Online (Sandbox Code Playgroud)

然后使用openssl上面的命令生成base64编码数据.因此,根据shell的功能,您可以使用复合语句来执行此操作bash:

{ echo "data:image/png;base64,"; openssl enc -base64 -in input.png; } > image.b64
Run Code Online (Sandbox Code Playgroud)

或者在Windows中这样:

echo data:image/png;base64,         > image.b64
openssl enc -base64 -in image.png  >> image.b64
Run Code Online (Sandbox Code Playgroud)

一旦您获得该格式的图像,您就可以继续处理它,ImageMagick如下所示:

convert inline:image.b64 result.png
Run Code Online (Sandbox Code Playgroud)

对于那些在css中使用它的人,-A在一行中将output 添加到输出

openssl enc -base64 -A -in image.png > image.b64
Run Code Online (Sandbox Code Playgroud)

原始答案

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

从Eric(@emcconville)设置开始:

# For example
convert rose: rose.png
# Create base64 file
openssl enc -base64 -in rose.png -out rose.txt
Run Code Online (Sandbox Code Playgroud)

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

{ echo "data:image/png;base64,"; cat rose.txt; } | convert inline:- out.jpg
Run Code Online (Sandbox Code Playgroud)

我想data:image/png;base64,不存在通过创建以base64文件openssl,所以我创建一个发送该加的文件,以一个复合语句stdinImageMagick.