วิธีการเข้ารหัส base64 ภาพใน linux bash / shell


107

ฉันพยายามที่จะเข้ารหัส base64 ภาพในเชลล์สคริปต์และใส่ลงในตัวแปร:

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

ฉันได้ลองทำสิ่งนี้ด้วย:

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

แต่ก็ยังไม่ประสบความสำเร็จ

ฉันต้องการทำสิ่งนี้:

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

ฉันพบสิ่งนี้http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

แต่ก็ยังไม่ประสบความสำเร็จ

คำตอบ:


159

คุณต้องใช้catเพื่อรับเนื้อหาของไฟล์ชื่อ 'DSC_0251.JPG' แทนที่จะเป็นชื่อไฟล์เอง

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

อย่างไรก็ตามbase64สามารถอ่านได้จากไฟล์:

test=$( base64 DSC_0251.JPG )

กับแมวมันใช้งานได้ดีขอบคุณมาก ฉันรู้ว่าสามารถอ่านจากไฟล์ได้ แต่ยังมีปัญหาในการจัดเก็บในตัวแปรดังนั้น test = "$ (cat DSC_0251.JPG | base64)" จึงใช้ได้
dash00

3
ปัญหาอะไร? ทั้งสองคำสั่งข้างต้นจะให้ผลลัพธ์ที่เหมือนกันยกเว้นแรกคือการใช้งานที่ไร้ประโยชน์ของแมว
chepner

คุณพูดถูก นี่คือสิ่งที่ฉันควรทำ$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 - ในกรณีที่มีผู้ต้องการเอาต์พุตเป็นสตริงเพื่อคัดลอกและวาง

1
เกิดอะไรขึ้นbase64 DSC_0251.JPG? ไม่จำเป็นต้องเรียกใช้catตัวกรองเมื่อโปรแกรมรับไฟล์เป็นอาร์กิวเมนต์ ( base64 [OPTIONS] [FILE])
Eric

64

ผลลัพธ์บรรทัดเดียว:

base64 -w 0 DSC_0251.JPG

สำหรับHTML:

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

เป็นไฟล์:

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

ในตัวแปร:

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

ในตัวแปรสำหรับHTML:

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

รับข้อมูลที่อ่านได้กลับมา:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

ดู: http://www.greywyvern.com/code/php/binary2base64


-w 0พารามิเตอร์นี้มีความสำคัญมากในหลาย ๆ กรณี เช่น หากเรากำลังทำงานโดยตรงในบรรทัดคำสั่ง ขอบคุณ!
Jayesh Dhandha

4
BTW ใน OSX base64: invalid option -- wฉันได้รับ Unable to open '0': No such file or directoryเมื่อมันถูกลบออกฉันได้รับ ดูสิ่งนี้แทน
coblr

38

มีคำสั่ง Linux สำหรับสิ่งนั้น: base64

base64 DSC_0251.JPG >DSC_0251.b64

เพื่อกำหนดผลลัพธ์ให้กับการใช้ตัวแปร

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPGสามารถดึงข้อมูลที่อ่านได้กลับมา
Alston

คำตอบนี้ใช้ได้กับไฟล์ xml และ csv เช่นกัน
Lucas Andrade

3

ฐาน 64 สำหรับ 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 และวางไว้ในคลิปบอร์ดของคุณ:

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

1

หากคุณต้องการข้อมูลจากภาคผนวกให้ลองทำเช่นนี้

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

-n ตัวเลือกจะไม่ป้อนอักขระ "\ n" ในคำสั่ง base64

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.