如何在linux bash / shell中实现base64图像编码

btqmn9zl  于 2023-03-30  发布在  Shell
关注(0)|答案(8)|浏览(492)

我尝试在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
但仍然没有成功。

pprl5pva

pprl5pva1#

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

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

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

test=$( base64 DSC_0251.JPG )
ki0zmccv

ki0zmccv2#

编码

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

作为Shell函数

@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
f0ofjuux

f0ofjuux3#

有一个Linux命令:base64

base64 DSC_0251.JPG >DSC_0251.b64

将结果分配给变量使用

test=`base64 DSC_0251.JPG`
lstz6jyr

lstz6jyr4#

如果您需要来自termial的输入,请尝试以下操作

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

-n选项将不向base64命令输入“\n”字符。

6yjfywim

6yjfywim5#

Base 64 for html:

file="DSC_0251.JPG"
type=$(identify -format "%m" "$file" | tr '[A-Z]' '[a-z]')
echo "data:image/$type;base64,$(base64 -w 0 "$file")"
ogsagwnx

ogsagwnx6#

将其转换为base64并将其放到剪贴板中:

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

xn1cxnb47#

请在使用echo时非常小心(这里有很多答案),因为它会在末尾添加一个换行符,由于这些不祥的extra encoded characters,扭曲了您的编码字符串(导致例如错误的密码):Cg==添加到编码字符串的末尾:
例如,如果我们有这个字符串要编码:

$ MINIO_SECRET_KEY=VsarGnNADHGv

使用`printf',它看起来像这样(正确的):

$ AWS_SECRET_ACCESS_KEY="$(printf $MINIO_SECRET_KEY | base64)" && echo $AWS_SECRET_ACCESS_KEY
VnNhckduTkFESEd2

...但echo如下所示(不正确):

$ AWS_SECRET_ACCESS_KEY="$(echo $MINIO_SECRET_KEY | base64)" && echo $AWS_SECRET_ACCESS_KEY
VnNhckduTkFESEd2Cg==
dnph8jn4

dnph8jn48#

在macOS Monterey上,您可以用途:

base64 -i image.jpg

相关问题