Як base64 кодувати зображення в linux bash / shell


104

Я намагаюся 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

але досі не мали успіху.

Відповіді:


154

Вам потрібно використовувати, 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

19
cat vlc.jpg | base64 -w 0 - на випадок, якщо хтось хоче вивести як рядок копію та вставку.

1
В чому проблема base64 DSC_0251.JPG? Немає необхідності запускати catфільтр, коли програма бере файл як аргумент ( base64 [OPTIONS] [FILE])
Ерік,

61

Однорядковий результат:

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
До речі на 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може повернути вам читабельні дані.
Алстон,

Ця відповідь також працювала для файлів xml та csv.
Лукас Андраде

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

0

Якщо вам потрібне введення з терміналу, спробуйте це

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

-n Параметр не вводить символ \ \ n до команди base64.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.