Cómo codificar imágenes en base64 en linux bash / shell


104

Estoy tratando de codificar una imagen en base64 en un script de shell y ponerla en la variable:

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

También probé algo como esto:

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

pero aún sin éxito.

Quiero hacer algo como esto:

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

Encontré esto http://www.zzzxo.com/q/answers-bash-base64-encode-script-not-encoding-right-12290484.html

pero aún no han tenido éxito.

Respuestas:


154

Debe usar catpara obtener el contenido del archivo llamado 'DSC_0251.JPG', en lugar del nombre del archivo en sí.

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

Sin embargo, base64puede leer desde el propio archivo:

test=$( base64 DSC_0251.JPG )

con gato funciona, genial muchas gracias hombre. Sé que puede leer desde un archivo, pero todavía tiene problemas para almacenarlo en la variable, así que test = "$ (cat DSC_0251.JPG | base64)" funciona para mí.
dash00

3
¿Qué problemas? Los dos comandos anteriores deberían producir resultados idénticos, excepto que el primero es un uso inútil de cat .
chepner

tienes razón. Esto es lo que debo hacer$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 - en caso de que alguien quiera una salida como cadena para copiar y pegar.

1
¿Qué pasa con base64 DSC_0251.JPG? No es necesario ejecutar el catfiltro cuando el programa toma un archivo como argumentos ( base64 [OPTIONS] [FILE])
Eric

61

Resultado de una sola línea:

base64 -w 0 DSC_0251.JPG

Para HTML:

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

Como archivo:

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

En variable:

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

En variable para HTML:

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

Recupere sus datos legibles:

base64 -d DSC_0251.base64 > DSC_0251.JPG 

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


-w 0este parámetro es muy importante en muchos casos. Ex. Si estamos corriendo directamente a la línea de comandos. ¡Gracias!
Jayesh Dhandha

4
Por cierto en OSX lo estoy recibiendo base64: invalid option -- w. Cuando se quita, obtengo Unable to open '0': No such file or directory. Mira esto en su lugar.
coblr

38

Hay un comando de Linux para eso: base64

base64 DSC_0251.JPG >DSC_0251.b64

Para asignar resultado al uso de variable

test=`base64 DSC_0251.JPG`

7
base64 -d DSC_0251.b64 > DSC_0251.JPGpuede recuperar sus datos legibles.
Alston

Esta respuesta también funcionó para archivos xml y csv.
Lucas Andrade

3

Base 64 para 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

Para basarlo y ponerlo en su portapapeles:

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

0

Si necesita información de termial, intente esto

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

-n La opción no ingresará el carácter "\ n" en el comando base64.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.