So codieren Sie Base64-Bilder in Linux Bash / Shell

102

Ich versuche, base64 ein Bild in einem Shell-Skript zu codieren und es in eine Variable zu setzen:

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

Ich habe auch so etwas versucht:

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

aber immer noch ohne Erfolg.

Ich möchte so etwas machen:

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

Ich habe diese http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html gefunden

habe aber noch keinen erfolg gehabt.

dash00
quelle

Antworten:

152

Sie müssen verwenden cat, um den Inhalt der Datei mit dem Namen 'DSC_0251.JPG' und nicht den Dateinamen selbst abzurufen.

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

Allerdings base64kann aus der Datei selbst lesen:

test=$( base64 DSC_0251.JPG )
chepner
quelle
mit Katze funktioniert es, vielen Dank Mann. Ich weiß, dass es aus einer Datei lesen kann, aber es hat immer noch Probleme, es in einer Variablen zu speichern, so dass test = "$ (cat DSC_0251.JPG | base64)" für mich funktioniert.
dash00
3
Welche Probleme? Die beiden obigen Befehle sollten identische Ergebnisse liefern, außer dass der erste eine nutzlose Verwendung von cat ist .
Chepper
Du hast recht. Dies ist, was ich tun soll$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 - für den Fall, dass jemand eine Ausgabe als Zeichenfolge zum Kopieren und Einfügen möchte.
1
Was ist los mit base64 DSC_0251.JPG? Es ist nicht erforderlich, den catFilter zu durchlaufen , wenn das Programm eine Datei als Argumente ( base64 [OPTIONS] [FILE]) verwendet
Eric
60

Einzeiliges Ergebnis:

base64 -w 0 DSC_0251.JPG

Für HTML:

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

Als Datei:

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

In Variable:

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

In Variable für HTML:

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

Erhalten Sie lesbare Daten zurück:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

Siehe: http://www.greywyvern.com/code/php/binary2base64

Eduardo Cuomo
quelle
-w 0Dieser Parameter ist in vielen Fällen sehr wichtig. Ex. Wenn wir direkt in die Kommandozeile laufen. Vielen Dank!
Jayesh Dhandha
4
Übrigens unter OSX bekomme ich base64: invalid option -- w. Wenn es entfernt wird, bekomme ich Unable to open '0': No such file or directory. Sehen Sie dies stattdessen.
Coblr
38

Dafür gibt es einen Linux-Befehl: base64

base64 DSC_0251.JPG >DSC_0251.b64

Um der Variablen das Ergebnis zuzuweisen

test=`base64 DSC_0251.JPG`
David Jashi
quelle
7
base64 -d DSC_0251.b64 > DSC_0251.JPGkönnen Sie lesbare Daten zurückbekommen.
Alston
Diese Antwort funktionierte auch für XML- und CSV-Dateien.
Lucas Andrade
3

Basis 64 für HTML:

file="DSC_0251.JPG"
type=$(identify -format "%m" "$file" | tr '[A-Z]' '[a-z]')
echo "data:image/$type;base64,$(base64 -w 0 "$file")"
Andrey Izman
quelle
1

So legen Sie es auf base64 und legen es in Ihrer Zwischenablage ab:

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

Wenn Sie Eingaben vom Termial benötigen, versuchen Sie dies

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

-n Die Option gibt kein "\ n" -Zeichen in den Befehl base64 ein.

Victor Choy
quelle