Cách mã hóa hình ảnh base64 trong linux bash / shell


102

Tôi đang cố gắng mã hóa base64 một hình ảnh trong một tập lệnh shell và đặt nó vào biến:

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

Tôi cũng đã thử một cái gì đó như thế này:

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

nhưng vẫn không thành công.

Tôi muốn làm một cái gì đó như thế này:

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

Tôi tìm thấy cái này http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

nhưng vẫn không có thành công.

Câu trả lời:


152

Bạn cần sử dụng catđể lấy nội dung của tệp có tên 'DSC_0251.JPG', thay vì chính tên tệp.

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

Tuy nhiên, base64có thể đọc từ chính tệp:

test=$( base64 DSC_0251.JPG )

với con mèo nó hoạt động, cảm ơn rất nhiều người đàn ông. Tôi biết rằng nó có thể đọc từ tệp, nhưng nó vẫn gặp sự cố khi lưu trữ nó trong biến nên test = "$ (cat DSC_0251.JPG | base64)" phù hợp với tôi.
dash00

3
Những vấn đề gì? Hai lệnh trên sẽ tạo ra các kết quả giống hệt nhau, ngoại trừ lệnh đầu tiên là một cách vô dụng của mèo .
chepner

bạn đúng rồi. Đây là những gì tôi nên làm$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 - trong trường hợp ai đó muốn đầu ra dưới dạng chuỗi để sao chép và dán.

1
Có chuyện gì vậy base64 DSC_0251.JPG? Không cần phải chạy qua các catbộ lọc khi chương trình diễn một tập tin như các đối số ( base64 [OPTIONS] [FILE])
Eric

60

Kết quả một dòng:

base64 -w 0 DSC_0251.JPG

Đối với HTML:

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

Dưới dạng tệp:

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

Trong biến:

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

Trong biến cho HTML:

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

Lấy lại cho bạn dữ liệu có thể đọc được:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

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


-w 0tham số này rất quan trọng trong nhiều trường hợp. Ví dụ. Nếu chúng ta đang chạy trực tiếp vào dòng lệnh. Cảm ơn!
Jayesh Dhandha

4
BTW trên OSX tôi đang nhận được base64: invalid option -- w. Khi nó được gỡ bỏ, tôi nhận được Unable to open '0': No such file or directory. Thay vào đó hãy xem cái này .
coblr

38

Có một lệnh Linux cho điều đó: base64

base64 DSC_0251.JPG >DSC_0251.b64

Để gán kết quả cho việc sử dụng biến

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPGcó thể lấy lại cho bạn dữ liệu có thể đọc được.
Alston

Câu trả lời này cũng hoạt động cho các tệp xml và csv.
Lucas Andrade

3

Cơ sở 64 cho 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

Để base64 nó và đặt nó vào khay nhớ tạm thời của bạn:

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

0

Nếu bạn cần đầu vào từ số hạn, hãy thử điều này

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

-n tùy chọn sẽ không nhập ký tự "\ n" vào lệnh base64.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.