如何在 linux bash / shell 中对图像进行 base64 编码

新手上路,请多包涵

我正在尝试在 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

但仍然没有成功。

原文由 dash00 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
3 个回答

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

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

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

 test=$( base64 DSC_0251.JPG )

原文由 chepner 发布,翻译遵循 CC BY-SA 3.0 许可协议

编码

在 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

原文由 Eduardo Cuomo 发布,翻译遵循 CC BY-SA 4.0 许可协议

新手上路,请多包涵

喜欢研究是好事,但我感觉太麻烦了,不行找个在线工具用一用吧base64 encode

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题