Linux bash / shell에서 이미지를 base64로 인코딩하는 방법


102

셸 스크립트에서 이미지를 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 찾았습니다 .

그러나 여전히 성공하지 못했습니다.

답변:


152

파일 이름 자체가 아닌 'DSC_0251.JPG'라는 파일 cat내용 을 가져 오기 위해 를 사용해야 합니다.

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

그러나 base64파일 자체에서 읽을 수 있습니다.

test=$( base64 DSC_0251.JPG )

고양이와 함께 작동합니다. 정말 감사합니다. 파일에서 읽을 수 있다는 것을 알고 있지만 여전히 변수에 저장하는 데 문제가 있으므로 test = "$ (cat DSC_0251.JPG | base64)"가 작동합니다.
dash00

3
어떤 문제들? 위의 두 명령은 첫 번째 명령 이 cat쓸모없는 사용을 제외하고 동일한 결과를 생성합니다 .
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 2013-06-04

19
cat vlc.jpg | base64 -w 0 -누군가 복사하여 붙여 넣을 문자열로 출력하려는 ​​경우.

1
뭐가 문제 야 base64 DSC_0251.JPG? cat프로그램이 파일을 인수로 사용할 때 필터 를 실행할 필요가 없습니다 ( base64 [OPTIONS] [FILE])
Eric

60

한 줄 결과 :

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에서 BTW를 받고 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

html 용 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로 만들고 클립 보드에 넣으려면 :

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

0

터미널에서 입력이 필요하면 이것을 시도하십시오

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

-n 옵션은 base64 명령에 "\ n"문자를 입력하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.