LoginSignup
6
1

改行なしのBase64エンコードをする方法いろいろ

Last updated at Posted at 2022-02-04

HTMLで画像を本文中に埋め込む場合などに、data URIを利用することがあります。

例えばこんな感じに使用します:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

この際、データは基本的には※例外下記改行なしのBase64エンコード文字列として埋め込みますが、この文字列を生成するための様々な方法に関する備忘録です。

※補足: 上記の例のように HTML5 の src アトリビュートに埋め込むような場合では、空白があっても無視されるので問題ないようです。

openssl

-A オプションを付けると改行がなくなります。

openssl base64 -A -in INPUT_FILE -out OUTPUT_FILE

base64 コマンド

同じ base64 という名前のコマンドが複数プラットフォームにあって、かつオプションが微妙に異なるようです...

MacOS版

base64 -i INPUT_FILE > OUTPUT_FILE

GNU Coreutils

-w オプションで改行までの長さを変更可能。-w 0 にすると改行がなくなります。

base64 -w 0 INPUT_FILE > OUTPUT_FILE

Perl ワンライナー

encode_base64() の第2引数によって区切りの変更ができます。

perl -MMIME::Base64 -0777 -ne 'print encode_base64($_,"")' < INPUT_FILE > OUTPUT_FILE

Ruby ワンライナー

ruby -r base64 -e "print Base64.strict_encode64($_)" < INPUTFILE > OUTPUT_FILE

encode64 ではなく、 strict_encode64 を使うのがポイント。

Python ワンライナー

あまり上品じゃないが以下で可能

python -c "import sys,base64;print(base64.b64encode(sys.stdin.buffer.read()).decode())" < ¥
INPUT_FILE > OUTPUT_FILE

ちなみに改行発生していいならもっと楽。残念ながら改行をなくすためのオプションが無い。

python -m base64 < INPUT_FILE > OUTPUT_FILE
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1