画像をBase64にエンコード(変換)してHTMLに埋め込んで表示速度を速くする


Googleの検索エンジンでWebページの表示速度が速いと、ユーザーにストレスを与えないので検索順位が上がるなどいろいろ言われている中で、表示速度を速くする方法の1つとしてHTTPリクエストを減らすという方法があります。

その1つとして画像のHTTPリクエストを減らす方法をご紹介します。
画像はどのWebサイトでも使用するので絶対にHTTPリクエストが発生するわけですが、今回は画像をBase64にエンコード(変換)してHTMLに埋め込んでHTTPリクエストを減らし、Webサイトの表示速度を速くする方法になります。

この手法は「インラインイメージ」と言われるものです。

画像をBase64にエンコード(変換)することで、文字列(テキストデータ)としてHTMLに埋め込むことができるので、画像ファイルのアップロードやサーバとのやり取りがなくなり、その分表示速度が速くなります。

注意しておきたいのが、HTTPリクエストが減るのでWebサイトの表示速度が速くなるとは言いましたが、Base64にエンコードすることで文字列データとして約1.3倍にデータサイズが大きくなります。
ですので大きい画像をBase64にエンコードするとすごくデータの文字列が増えて逆にファイルが重くなります。
アイコンなど小さい画像だけ対応しておくと良いでしょう。

気になる対応するWebブラウザですが、
主要のWebブラウザではIE8〜、Chrome、Firefox、Safariの最新バージョンは対応しています。
Chrome、Firefox、Safariでもあまり古いとちょっと怪しいかも。
まぁそれほど古いバージョンを利用されている方はほとんどいないので大丈夫でしょう。

それではどういったものか見ていきましょう。


HTMLの記述方法


はじめにHTMLの記述方法を説明しておきます。
Base64にエンコードした文字列をHTMLに埋め込むには「data URI scheme」という書式で書きます。
「data:」から始まるのが特長です。

data:[メディアタイプ];[エンコード方式],[データ]

 
メディアタイプ別の記述

JPEG
data:image/jpeg;base64,[データ]

PNG
data:image/png;base64,[データ]

GIF
data:image/gif;base64,[データ]

SVG
data:image/svg+xml;base64,[データ]


[データ]の部分にこれから説明しますBase64にエンコードする文字列データを入れます。

PNG画像での記述例

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE....." alt="">



文字列データの他、JPEG、PNG、GIF、SVGなどのメディアタイプに合わせて、img要素のsrc属性に画像の情報を記述します。


画像をBase64にエンコード(変換)


画像をBase64にエンコードする方法はいくつかありますが、主に下記の3つになります。

・Google Chromeのデベロッパーツールで確認
・オンラインWebツールで変換
・ターミナルやコマンドプロンプトで変換


それぞれの利用方法を見てみましょう。

Google Chromeのデベロッパーツールで確認


Google Chromeのデベロッパーツールを使うと簡単にBase64のテキストデータを確認することができます。

Sources」のタブで左側にフォルダの階層が表示されていますので、そちらで該当する画像までいき選択した状態にします。

画像をBase64にエンコード(変換)01

 

表示されている画像をドラッグ&ドロップでそのままWebブラウザのタブで開くと、画像のURLがテキストデータの文字列になっています。

画像をBase64にエンコード(変換)02


こちらをコピーしてHTMLのimg要素に貼り付けます。

オンラインWebツールで変換


オンラインのWebサービスでの変換方法です。
いろいろある中で1つWebサービスをご紹介します。

Href Tools
https://hreftools.com/

こちらのサイトは画像をBase64にエンコードするだけでなく、HTMLやCSS、JavaScriptファイルの圧縮や、OCRでの画像からテキスト抽出などができるWebサービスとなります。
OCRでの画像からテキスト抽出はあまり正確じゃないかも。

今回は画像をBase64にエンコードすることなので、「IMAGE TO BASE64」を選択。

画像をBase64にエンコード(変換)03

 

左側にClick to Upload or drop your image fileと枠がありますので、そちらをクリックして画像を選択。
もしくは画像をドラッグ&ドロップで枠に持っていきます。

画像をBase64にエンコード(変換)04

 

右側にエンコードされたコードが表示されますので、コピーしてHTMLに貼り付けます。
コードは2パターン表示されます。
お好きな方をご利用ください。

画像をBase64にエンコード(変換)05

 

Base64 Stringは、テキストデータの文字列部分のコード。
上記で記述例の[データ]の部分に貼り付けます。

Base64 in HTMLは、そのままHTMLタグで貼り付けれるようimg要素のコードになります。
alt属性は「alt=”image”」と自動で入っていますので、画像に合ったテキストに変更してください。

オンラインのWebサービスは調べると他にもいくつかありますが、別の機能もたくさんあったのでHref Toolsを紹介しました。
HTML、CSS、JavaScriptの圧縮をされる方は、ファイルの修正をする際に圧縮された状態では編集が困難ですので、ファイルをアップロードする前に圧縮前のバックアップファイルをしっかりと管理しておきましょう。

ターミナルやコマンドプロンプトで変換


MacのターミナルやWindowsのコマンドプロンプトでの変換方法をご説明します。

Macのターミナルで変換

 
Macのターミナルでbase64コマンドを使います。
記述は下記の書き方になります。

base64 半角スペース 画像パス

base64と書いて半角スペースを空けたら、画像をターミナルにドラッグ&ドロップすれば画像までのパスが入ります。
画像パスまで入ったら「Enter」を押せば、テキストデータの文字列が表示されます。

画像をBase64にエンコード(変換)06

 

表示されたテキストデータの文字列を上記で記述例の[データ]の部分に貼り付けます。

Windowsのコマンドプロンプトで変換

 
Windowsのコマンドプロンプトではcertutilコマンドを使います。
対象の画像をデスクトップに置いて説明します。

画像をBase64にエンコード(変換)07

 

対象の画像はデスクトップにあるのでcdコマンドでデスクトップへ移動します。

デスクトップへの移動
「cd C:¥Users¥ユーザー名¥Desktop」

移動したら「certutil -encode “入力ファイル” “出力ファイル”」というようにcertutilコマンドで半角スペースを空けながら「-encode」「入力ファイル(対象の画像)」「出力ファイル」と打ってからEnter
出力ファイルの名前は自由に決めてください。

certutilコマンド
「certutil -encode arrow_up.png base64.txt」

画像をBase64にエンコード(変換)08



正常に完了したらbase64.txtが生成されます。
 
中身を見るとBase64エンコードされた文字コードが生成されています。

画像をBase64にエンコード(変換)09



テキストファイルの文字列データをコピーして、ソースコードに適用してください。


まとめ


画像のHTTPリクエストを減らす方法としてBase64にエンコードしてHTMLに埋め込む方法をご紹介しましたが、変換の方法はGoogle Chromeのデベロッパーツールで確認する方法が一番シンプルで簡単かと思います。

オンラインのWebサービスは他にもたくさんありますので、検索していろいろと使って試してみてください。

サイズの大きい画像をなんとかしたい場合はこちらで簡単で綺麗にサイズを圧縮する方法を紹介しています。

↓ ↓ ↓

画像のファイルサイズを簡単に圧縮してくれるおすすめのWebサービス