如何在Linux bash / shell中对图像进行base64编码


102

我正在尝试对shell脚本中的图像进行base64编码并将其放入变量中:

test="$(printf DSC_0251.JPG | base64)"
echo $test
RFNDXzAyNTEuSlBH

我也尝试过这样的事情:

test=\`echo -ne DSC_0251.JPG | base64\`

但仍然没有成功。

我想做这样的事情:

curl -v -X POST -d '{"image":$IMAGE_BASE64,"location":$LOCATION,"time_created":$TIMECREATED}' -H 'Content-type: text/plain; charset=UTF8' http://192.168.1.1/upload

我找到了这个http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

但仍然没有成功。

Answers:


152

您需要使用cat来获取名为“ DSC_0251.JPG”的文件的内容,而不是文件名本身。

test="$(cat DSC_0251.JPG | base64)"

但是,base64可以从文件本身读取:

test=$( base64 DSC_0251.JPG )

与猫一起工作,非常感谢男人。我知道它可以从文件读取,但是将其存储在变量中仍然存在问题,因此test =“ $(cat DSC_0251.JPG | base64)”对我有用。
dash00 2013年

3
什么问题?上面的两个命令应该产生相同的结果,除了第一个是对cat无用用法
chepner 2013年

你是对的。这就是我应该做的$RESPONSE="$(curl -v -X POST -d '{"image":`base64|$DIR$IMAGE`,"location":$LOCATION,"time_created":$TIMECREATED}' -H 'Content-type: text/plain; charset=UTF8' --max-time 180 -s $URL)";
dash00 2013年

19
cat vlc.jpg | base64 -w 0 -如果有人希望将输出作为字符串复制并粘贴。

1
这有什么错base64 DSC_0251.JPGcat当程序将文件作为参数时,无需运行过滤器(base64 [OPTIONS] [FILE]
Eric

60

单行结果:

base64 -w 0 DSC_0251.JPG

对于HTML

echo "data:image/jpeg;base64,$(base64 -w 0 DSC_0251.JPG)"

作为文件:

base64 -w 0 DSC_0251.JPG > DSC_0251.JPG.base64

在变量中:

IMAGE_BASE64="$(base64 -w 0 DSC_0251.JPG)"

在变量中HTML

IMAGE_BASE64="data:image/jpeg;base64,$(base64 -w 0 DSC_0251.JPG)"

获取可读数据:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

请参阅:http//www.greywyvern.com/code/php/binary2base64


-w 0在许多情况下,此参数非常重要。例如 如果我们直接在命令行中运行。谢谢!
Jayesh Dhandha

4
顺便说一句,我在OSX上base64: invalid option -- w。删除后,我得到了Unable to open '0': No such file or directory。看到这个代替。
coblr



1

要对其进行base64并将其放入剪贴板中:

file="test.docx"
base64 -w 0 $file  | xclip -selection clipboard

0

如果您需要终端输入,请尝试以下操作

lc=`echo -n "xxx_${yyy}_iOS" |  base64`

-n 选项不会在base64命令中输入“ \ n”字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.