2013-06-04 10 views
51

Próbuję base64 kodowania obrazu w skrypcie powłoki i umieścić go w zmiennej:Jak base64 kodowanie obrazu w linux bash/shell

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

próbowałem też coś takiego:

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

ale nadal bez powodzenia.

chcę zrobić coś takiego:

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 

Znalazłem http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

ale nadal nie miał powodzenia.

Odpowiedz

73

trzeba użyć cat uzyskać zawartość pliku o nazwie „DSC_0251 .JPG ', zamiast samej nazwy pliku.

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

Jednak base64 można odczytać z samego pliku:

test=$(base64 DSC_0251.JPG) 
+0

z kotem działa, wielkie dzięki bardzo dużo. Wiem, że potrafi czytać z pliku, ale nadal ma problemy z zapisaniem go w zmiennej, więc test = "$ (cat DSC_0251.JPG | base64)" działa dla mnie. – dash00

+1

Jakie problemy? Te dwa powyższe polecenia powinny dawać identyczne wyniki, z wyjątkiem pierwszego, który jest [bezużyteczne użycie kota] (http://partmaps.org/era/unix/award.html). – chepner

+0

masz rację. Oto, co powinienem zrobić '$ RESPONSE =" $ (curl -v -X POST -d "{" image ": \" base64 | $ DIR $ IMAGE \ "," location ": $ LOCATION," time_created ": $ TIMECREATED} '-H' Typ zawartości: text/plain, charset = UTF8 '--max-time 180 -s $ URL) ";' – dash00

29

Jest poleceń Linuksa na to: base64

base64 DSC_0251.JPG >DSC_0251.b64 

Aby przypisać wynik do zmiennej użytku

test=`base64 DSC_0251.JPG` 
+7

'base64 -d DSC_0251.b64> DSC_0251.JPG' może odzyskać czytelne dane. – Stallman

22

pojedynczy wynik linia:

base64 -w 0 DSC_0251.JPG 

Dla HTML:

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

jako plik:

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

W zmienna:

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

W zmiennej dla HTML:

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

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

0

Podstawa 64 dla html:

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