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.

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 )

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


-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`

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")"

1

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.