Data URI 変換ツール

画像・フォントをBase64 Data URIに変換・復元

画像やフォントファイルをドラッグ&ドロップ、またはクリックしてアップロード

PNG・JPEG・GIF・WebP・SVG、WOFF・WOFF2・TTF・OTF など

🔒 ファイルはブラウザ内でのみ処理され、サーバーには送信されません。

Data URI 変換ツールについて

data URIはファイルの中身をURLそのものに書き込む方式です。「data:image/png;base64,iVBOR…」のような形で、imgのsrcやCSSのurl()に入れると別ファイルを取りに行かずに画像が表示されます。形式は1998年のRFC 2397で定められました。

このツールは双方向に使えます。ファイルを入れるとBase64のdata URI、サイズの増え方、そのまま使えるCSS(background-image、フォントなら@font-face)を作り、data URIを貼るとMIMEタイプ・符号化方式・元のサイズを表示し、ファイルとして保存できます。

data URIの読み方

文法は data:[メディアタイプ][;base64],データ です。最初のカンマの前が説明、後ろが中身です。メディアタイプを省略するとRFC 2397は text/plain;charset=US-ASCII とみなします。「data:,Hello%2C%20World%21」も正しいdata URIで、このツールでは text/plain、13バイト、「Hello, World!」と表示されます。

;base64があればカンマの後ろはBase64、なければパーセントエンコードです。このツールは%XXをUTF-8として解釈せずそのままバイトに戻すので、%FF%00のようなバイナリやcharset=Shift_JISのテキストも失われず、保存時にはcharsetをファイルの形式に付けます。画像やフォントはほぼBase64で書きますが、SVGはもともとテキストなのでBase64にすると33%増え、<、>、# など一部を置き換えるだけのパーセントエンコードの方が短くなります。

サイズ:33%は大きなファイルでの話

Base64は3バイトを4文字にするので中身は ceil(n/3)×4 文字、さらに「data:image/png;base64,」の22文字が付きます。30,000バイトのPNGはBase64で40,000文字、URI全体で40,022文字(+33%)。100バイトのアイコンはBase64で136文字(+36%)、全体では158文字(+58%)です。ツールが2つの増加率を分けて表示するのはこのためです。

インライン化が逆効果になるとき

data URIの利点はHTTPリクエストを1つ減らせることです。接続数の制限があったHTTP/1.1時代は小さなアイコンのインライン化が確実に効きましたが、1本の接続で多数のリクエストを並行処理できるHTTP/2以降、その効果は小さくなりました。一方で欠点はそのままです。

  • 個別にキャッシュできない:インライン画像は、それを含むCSSやHTMLの一部としてしかキャッシュされません。ロゴを1つ変えるとCSS全体を取り直すことになり、複数ページのHTMLに入れればページごとに同じバイトを受け取ります。
  • 描画を止める:CSSがそろうまで画面は描かれないので、CSS内の大きなdata URIは初回表示をその分遅らせます。
  • 優先度や遅延読み込みが効かない:loading="lazy"やsrcsetの意味がなくなり、画面外の画像も必ず一緒に届きます。
  • 33%大きい:gzipなどの圧縮で一部は取り戻せますが、元の画像より大きいままです。

それでも向いている場面

数百バイト程度のアイコンや模様、一度しか使わないローディング表示、外部画像がブロックされがちなHTMLメール、単一ファイルのレポート、オフラインで開く文書などです。Webフォントを@font-faceにインライン化すると表示時のちらつきは減りますが、フォントは数十KBあることが多く、その分CSSが重くなります。

セキュリティ上の注意:主要ブラウザはフィッシング対策として、アドレスバーやリンクからdata: URLをトップレベルのページとして開くことを禁止しています。画像やスタイル内での利用には影響しません。

例

メディアタイプ省略

入力
data:,Hello%2C%20World%21
結果
text/plain・パーセントエンコード・charset US-ASCII・13バイト・Hello, World!

タイプがなければRFC 2397の既定値 text/plain;charset=US-ASCII とみなします。%2Cはカンマ、%20は空白です。

Base64のテキスト

入力
data:text/plain;charset=UTF-8;base64,5pel5pys
結果
text/plain・charset UTF-8・6バイト・日本

Base64の8文字が6バイトになり、UTF-8で読むと2文字です。

パーセントエンコードのSVG

入力
data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'/%3E
結果
image/svg+xml・41バイト・拡張子svg

<と>だけを置き換えているのでBase64より短くなります。

小さいファイルと大きいファイル

入力
100バイトのPNG / 30,000バイトのPNG
結果
158文字(+58%) / 40,022文字(+33%)

Base64部分は+36%と+33%ですが、22文字の接頭辞が小さいファイルでは効いてきます。

使い方

  1. ファイル→data URI:ファイルをドロップまたは選択すると、URI・サイズ変化・CSSが表示されます。
  2. フォントならフォント名を入れて@font-faceルールをコピーします。
  3. data URI→ファイル:文字列を貼るとタイプとサイズを確認でき、画像はプレビューし、ファイルとして保存できます。

よくある質問

どのくらいのサイズまでインライン化すべき?

公式な基準はありません。数KBを超えると、個別キャッシュができない損がリクエスト1つ分の得を上回りやすくなります。複数ページで使い回す画像はサイズに関係なく別ファイルが無難です。

data URIをアドレスバーに貼っても開きません。

主要ブラウザはdata: URLでトップレベルのページを開くことを禁止しています。画像ならこのツールでプレビューするか保存してください。

SVGはBase64とパーセントエンコードのどちらがよい?

たいていパーセントエンコードの方が短くなります。

保存したファイルの拡張子が.binになります。

ツールが知らないMIMEタイプで拡張子を推定できなかった場合です。中身はそのままなので、正しい拡張子に名前を変えてください。

出典

基準日:

プライバシーとデータの扱い