Linux bash /シェルで画像をbase64エンコードする方法


102

私はシェルスクリプトで画像を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

しかし、まだ成功していません。

回答:


152

ファイル名自体ではなく、「DSC_0251.JPG」という名前のファイルcatコンテンツを取得するために使用する必要があります。

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

ただし、base64ファイル自体から読み取ることができます。

test=$( base64 DSC_0251.JPG )

猫ではうまくいきます、たくさんの人に感謝します。ファイルから読み取れることはわかっていますが、変数に格納するのに問題があるため、test = "$(cat DSC_0251.JPG | base64)"が機能します。
dash00 2013年

3
どんな問題?上記の2つのコマンドは、最初のコマンドが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

19
cat vlc.jpg | base64 -w 0 -誰かが文字列として出力をコピーして貼り付けたい場合。

1
何が問題になっていbase64 DSC_0251.JPGますか?catプログラムがファイルを引数として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

38

そのためのLinuxコマンドがありますbase64

base64 DSC_0251.JPG >DSC_0251.b64

結果を変数に割り当てるには

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPG読み取り可能なデータを取り戻すことができます。
Alston、2014

この回答は、xmlファイルとcsvファイルでも機能しました。
Lucas Andrade


1

それをbase64してクリップボードに入れるには:

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

0

項からの入力が必要な場合は、これを試してください

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

-n オプションはbase64コマンドに「\ n」文字を入力しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.