138

我正在尝试在 shell 脚本中对图像进行 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

但仍然没有成功。

4

6 回答 6

192

您需要使用cat来获取名为“DSC_0251.JPG”的文件的内容,而不是文件名本身。

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

但是,base64可以从文件本身读取:

test=$( base64 DSC_0251.JPG )
于 2013-06-04T13:09:52.937 回答
89

编码

在 Linux 上

单行结果:

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)"

在 OSX 上

OSX上,base64二进制不同,参数也不同。如果你想在OSX上使用它,你应该删除-w 0.

单行结果:

base64 DSC_0251.JPG

对于HTML

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

作为文件:

base64 DSC_0251.JPG > DSC_0251.JPG.base64

在变量中:

IMAGE_BASE64="$(base64 DSC_0251.JPG)"

在变量中HTML

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

通用 OSX/Linux

作为壳函数

@base64() {
  if [[ "${OSTYPE}" = darwin* ]]; then
    # OSX
    if [ -t 0 ]; then
      base64 "$@"
    else
      cat /dev/stdin | base64 "$@"
    fi
  else
    # Linux
    if [ -t 0 ]; then
      base64 -w 0 "$@"
    else
      cat /dev/stdin | base64 -w 0 "$@"
    fi
  fi
}

# Usage
@base64 DSC_0251.JPG
cat DSC_0251.JPG | @base64

作为 Shell 脚本

创建base64.sh具有以下内容的文件:

#!/usr/bin/env bash
if [[ "${OSTYPE}" = darwin* ]]; then
  # OSX
  if [ -t 0 ]; then
    base64 "$@"
  else
    cat /dev/stdin | base64 "$@"
  fi
else
  # Linux
  if [ -t 0 ]; then
    base64 -w 0 "$@"
  else
    cat /dev/stdin | base64 -w 0 "$@"
  fi
fi

使其可执行:

chmod a+x base64.sh

用法:

./base64.sh DSC_0251.JPG
cat DSC_0251.JPG | ./base64.sh

解码

让您恢复可读数据:

base64 -d DSC_0251.base64 > DSC_0251.JPG 
于 2015-10-01T20:02:32.573 回答
40

有一个Linux命令:base64

base64 DSC_0251.JPG >DSC_0251.b64

将结果分配给变量使用

test=`base64 DSC_0251.JPG`
于 2013-06-04T13:06:35.797 回答
4

如果您需要终端输入,试试这个

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

-n 选项不会在 base64 命令中输入“\n”字符。

于 2019-08-16T09:49:11.120 回答
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")"
于 2017-08-01T22:00:45.490 回答
1

对其进行base64并将其放入剪贴板:

file="test.docx"
base64 -w 0 $file  | xclip -selection clipboard
于 2019-04-03T08:50:25.587 回答