Data URI 変換ツール
画像・フォントをBase64 Data URIに変換・復元
画像やフォントファイルをドラッグ&ドロップ、またはクリックしてアップロード
PNG・JPEG・GIF・WebP・SVG、WOFF・WOFF2・TTF・OTF など
⚠️ 結果が大きいです。大きなリソースをCSS/HTMLに直接埋め込むと読み込みが遅くなることがあります。
この形式のプレビューには対応していませんが、ダウンロードは可能です。
🔒 ファイルはブラウザ内でのみ処理され、サーバーには送信されません。
処理中…
0.0
停止していません。計算が終わると結果が表示されます。
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文字の接頭辞が小さいファイルでは効いてきます。
使い方
- ファイル→data URI:ファイルをドロップまたは選択すると、URI・サイズ変化・CSSが表示されます。
- フォントならフォント名を入れて@font-faceルールをコピーします。
- data URI→ファイル:文字列を貼るとタイプとサイズを確認でき、画像はプレビューし、ファイルとして保存できます。
よくある質問
どのくらいのサイズまでインライン化すべき?
公式な基準はありません。数KBを超えると、個別キャッシュができない損がリクエスト1つ分の得を上回りやすくなります。複数ページで使い回す画像はサイズに関係なく別ファイルが無難です。
data URIをアドレスバーに貼っても開きません。
主要ブラウザはdata: URLでトップレベルのページを開くことを禁止しています。画像ならこのツールでプレビューするか保存してください。
SVGはBase64とパーセントエンコードのどちらがよい?
たいていパーセントエンコードの方が短くなります。
保存したファイルの拡張子が.binになります。
ツールが知らないMIMEタイプで拡張子を推定できなかった場合です。中身はそのままなので、正しい拡張子に名前を変えてください。
出典
基準日: