Come codificare in base64 l'immagine in linux bash / shell


102

Sto cercando di codificare in base64 un'immagine in uno script di shell e inserirla in una variabile:

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

Ho anche provato qualcosa di simile:

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

ma ancora senza successo.

Voglio fare qualcosa del genere:

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

Ho trovato questo http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

ma ancora non hanno avuto successo.

Risposte:


152

È necessario utilizzare catper ottenere il contenuto del file denominato "DSC_0251.JPG", anziché il nome del file stesso.

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

Tuttavia, base64può leggere dal file stesso:

test=$( base64 DSC_0251.JPG )

con il gatto funziona, fantastico grazie mille amico. So che può leggere da file, ma ha ancora problemi a memorizzarlo nella variabile quindi test = "$ (cat DSC_0251.JPG | base64)" funziona per me.
dash 00

3
Quali problemi? I due comandi precedenti dovrebbero produrre risultati identici, tranne per il fatto che il primo è un uso inutile di cat .
chepner

hai ragione. Questo è quello che dovrei fare$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 - nel caso in cui qualcuno desideri l'output come stringa da copiare e incollare.

1
Cosa c'è che non va base64 DSC_0251.JPG? Non è necessario eseguire il catfiltro quando il programma accetta un file come argomenti ( base64 [OPTIONS] [FILE])
Eric,

60

Risultato riga singola:

base64 -w 0 DSC_0251.JPG

Per HTML:

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

Come file:

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

In variabile:

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

In variabile per HTML:

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

Recuperare dati leggibili:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

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


-w 0questo parametro è molto importante in molti casi. Ex. Se stiamo correndo direttamente nella riga di comando. Grazie!
Jayesh Dhandha

4
BTW su OSX che sto ottenendo base64: invalid option -- w. Quando viene rimosso, ottengo Unable to open '0': No such file or directory. Vedi questo invece.
coblr

38

C'è un comando Linux per questo: base64

base64 DSC_0251.JPG >DSC_0251.b64

Per assegnare il risultato all'uso delle variabili

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPGpuò riportarti dati leggibili.
Alston

Questa risposta ha funzionato anche per i file xml e csv.
Lucas Andrade

3

Base 64 per 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

Per base64 e metterlo negli appunti:

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

0

Se hai bisogno di input da Termial, prova questo

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

-n l'opzione non inserirà il carattere "\ n" nel comando base64.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.