Linux bash / shell'de base64 görüntü nasıl kodlanır


107

Bir kabuk komut dosyasındaki bir görüntüyü base64 kodlamaya ve onu değişkene koymaya çalışıyorum:

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

Ben de bunun gibi bir şey denedim:

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

ama yine de başarılı olamadı.

Bunun gibi bir şey yapmak istiyorum:

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

Bunu http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html buldum

ama yine de başarılı olamadı.

Yanıtlar:


159

Sen kullanmak gerekir catalmak için içeriklerini 'DSC_0251.JPG' adlı dosyada yerine dosya kendisinin.

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

Ancak, base64dosyanın kendisinden okuyabilir:

test=$( base64 DSC_0251.JPG )

kedi ile işe yarıyor, çok teşekkürler dostum. Dosyadan okuyabildiğini biliyorum, ancak yine de değişkende saklamakta sorun yaşıyor, bu yüzden test = "$ (cat DSC_0251.JPG | base64)" benim için çalışıyor.
dash00

3
Ne tür sorunlar? Yukarıdaki iki komutun aynı sonuçları vermesi gerekir, ancak ilki kedinin faydasız kullanımıdır .
chepner

Haklısın. Yapmam gereken bu$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

20
cat vlc.jpg | base64 -w 0 - birinin çıktının kopyalanıp yapıştırılması için dize olarak istediği durumda.

1
Neyin var base64 DSC_0251.JPG? catProgram bir dosyayı argüman olarak aldığında filtreyi çalıştırmaya gerek yoktur ( base64 [OPTIONS] [FILE])
Eric

64

Tek satır sonucu:

base64 -w 0 DSC_0251.JPG

Şunun için HTML:

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

Dosya olarak:

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

Değişken olarak:

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

Değişken olarak HTML:

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

Okunabilir verileri geri alın:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

Bakınız: http://www.greywyvern.com/code/php/binary2base64


-w 0bu parametre birçok durumda çok önemlidir. Örn. Doğrudan komut satırına koşuyorsak. Teşekkürler!
Jayesh Dhandha

4
OSX'te BTW alıyorum base64: invalid option -- w. Kaldırıldığında anlıyorum Unable to open '0': No such file or directory. Bunun yerine buna bakın .
coblr

38

Bunun için bir Linux komutu var: base64

base64 DSC_0251.JPG >DSC_0251.b64

Değişken kullanımına sonuç atamak için

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPGokunabilir verileri geri getirebilir.
Alston

Bu cevap xml ve csv dosyaları için de işe yaradı.
Lucas Andrade

3

Html için Base 64:

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

1

Base64 yapmak ve panonuza koymak için:

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

1

Termialden girdiye ihtiyacınız varsa, bunu deneyin

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

-n seçenek, base64 komutuna "\ n" karakterini girmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.