FIRST CH TOOLS / 画像 / 47 SVG OPTIMIZER
SVG最適化&data URI化
IllustratorやFigmaから書き出したSVGには、編集ソフトの覚え書きが大量に残っています。このツールは SVGO でそれを落とし、Before / After を並べて見た目が変わっていないことを確かめながら軽くします。CSSの background-image にそのまま貼れるエンコード済みのdata URIも同時に出るので、アイコン1つのために外部ファイルを増やさずに済みます。最適化はこのページの中だけで動き、ファイルがサーバーへ送られることはありません。
Figmaは「Copy as SVG」、Illustratorは「SVGとして保存」または「書き出し形式」で出したものをそのまま貼れます。
viewBox は消しません(消すと拡大縮小できなくなるため)。桁数はアイコンなら2〜3、地図やイラストは3〜4が目安です。0にすると形が崩れることがあるので、必ず下の Before / After で確かめてください。
このSVGについて気づいたこと
2枚が同じに見えれば成功です。細い線が消えた・角が丸まった・文字がずれた場合は、桁数を1つ上げてください。市松模様は透明部分です。
How to Use
- SVGを入れる書き出した .svg をドラッグ&ドロップするか、コードをそのまま貼り付けます。読み込んだ瞬間に最適化が走ります。
- Before / After を見比べる削減率と、左右のプレビューを確認します。見た目が変わっていたら小数点の桁数を上げ、外部から参照しているIDがあるなら「ID・クラス名を整理する」を外します。
- 使う形で持ち出すファイルとして置くなら .svg をダウンロード、CSSに埋め込むなら background-image の行をコピーします。
About This Tool
最適化はこのページの中だけで動きます。最適化には SVGO v4.1.0(MIT)のブラウザ向け配布物を同梱して使っています。SVGOはNode用のツールとして知られていますが、公式に dist/svgo.browser.js というブラウザ用のビルドが配られており、これをそのまま読み込んでいます。したがってビルドサーバーもアップロードも無く、社外に出せない支給素材やクライアントのロゴでも、そのまま端末内で処理できます。
何が削られるのか。既定の設定(preset-default)が落とすのは、編集ソフトが書いたメタデータ・コメント・<?xml> 宣言・使われていない定義・空のグループ・効かない属性、そして過剰な小数点の桁です。あわせて、形の同じ図形を <path> に統一し、パスの座標を相対指定へ詰め直し、色を短い表記(#ffffff → #fff、#ff0000 → red)に置き換えます。1回で終わらせず、変化が無くなるまで繰り返します(multipass)。書き出したままのSVGなら、だいたい30〜60%小さくなります。
消さないものを決めています。viewBox は削りません(消すと表示先の大きさに合わせて拡大縮小できなくなり、CSSの背景に使ったときに困ります)。<title> も既定では残します(スクリーンリーダーが読む部分ですが、SVGOの既定では消えます)。<desc> は、編集ソフトが書いた「Created with Sketch.」のような定型文だけを落とし、自分で書いた説明はそのままにします。逆に <script> と on… のイベント属性は既定で削除します。支給されたSVGは、埋め込まれたスクリプトの隠れ場所として珍しくありません——<img> で表示するぶんには動きませんが、HTMLに直接貼り込むと自分のコードと同じ権限で動きます。アニメーションのために必要なら、チェックを外せば残せます。
data URI は3つの形で出します。CSSの background-image に使うなら、base64 より URLエンコードのほうが小さくなります(base64は元の約1.33倍に膨らむのに対し、SVGは記号の少ないテキストなのでエンコードで増える分が小さいためです)。しかも中身がテキストのまま読めるので、あとから色だけ書き換えることができます。このツールのURLエンコード版は、属性の囲みを ' にして url("…") に収め、そのうえで encodeURIComponent で全部エンコードしてから安全な文字(空白・=・:・/)だけを戻しています。base64版は、記号を通したくない場所のために添えています。汎用のファイル→Base64変換は Base64 & Data URI変換 にあります。
gzip後のサイズも出しています。実際の配信ではサーバーがgzip(またはBrotli)で圧縮するため、利用者が待つのはこちらの数字です。SVGは繰り返しの多いテキストなのでgzipがよく効き、生のファイルサイズほどの差にはなりません。それでも最適化しておく意味は、gzip後でも差が残ることと、data URIとしてCSSやHTMLに埋め込んだときは、そのぶんが毎回本体に乗ることにあります。
画像そのものを軽くするなら 画像→WebP一括変換・画像→AVIF変換、寸法を変えるなら 画像リサイズ&クロップ、SVGで書き出せるQRコードは QRコード生成 にあります。faviconのSVGを作るなら faviconジェネレーター と組み合わせてください。
思ったより小さくならないとき
中身が写真(ラスター画像)
SVGの中に <image> でPNGやJPEGが埋め込まれていると、その部分はただのbase64の塊です。SVGOは画素に触れないので、いくら設定を変えても縮みません。写真は WebP や AVIF で別に書き出し、SVGにはベクターの部分だけを残してください。
写真をトレースしたパス
画像トレースで作ったSVGは、点が数万個あることがあります。桁数を落とせば多少は縮みますが、そもそもベクターにする対象ではない可能性が高いです。ファイルが1MBを超えるようなら、元の画像をラスターのまま使うほうが速くなります。
フォントを埋め込んでいる
@font-face でフォントをdata URIとして抱えているSVGは、絵よりフォントのほうが重くなります。文字をアウトライン化する(パスに変換する)か、フォントはページ側で読み込んでSVGからは外してください。
すでに最適化済み
アイコンライブラリから取ってきたSVGは、配布前に最適化されていることがほとんどです。削減率が数%なら、それ以上は削るところがありません。元のファイルをそのまま使ってください(無理に桁数を下げると形が崩れます)。
IDが消えて壊れた
グラデーション・クリップパス・フィルタは url(#id) でIDを参照しています。SVGOはファイル内の参照は追跡して残しますが、外から参照しているID(スプライトの <use href="#icon-x">、CSSやJSで掴んでいる要素)までは分かりません。その場合は「ID・クラス名を整理する」を外してください。
Other Tools
- 01画像→WebP一括変換WebP Converter
- 02白背景の透過White BG Remover
- 03コントラスト比チェッカーContrast Checker
- 04文字数カウントCharacter Counter
- 05llms.txt ジェネレーターllms.txt Generator
- 06JSON-LD構造化データ生成JSON-LD Generator
- 07Markdown→PDF変換MD → PDF
- 08OGPメタタグ生成ウィザードOGP Wizard
- 09faviconジェネレーターFavicon Generator
- 10TikTok投稿ツールTikTok Publisher
- 11文字コード・改行コード変換Encoding Converter
- 12画像→AVIF変換+picture生成AVIF Converter
- 13テストデータ生成Test Data Generator
- 14Marp Markdown→スライドMarp Slides
- 15テキスト・コード差分チェッカーDiff Checker
- 16Cron式ビジュアル解説&発火日時Cron Explainer
- 17Base64 & Data URI変換Base64 & Data URI
- 18URLパラメータ分解・UTMタグ編集URL Parameters
- 19HTMLエンティティ・特殊文字エスケープHTML Escape
- 20JSON ⇄ YAML 相互変換&整形JSON ⇄ YAML
- 21PX ⇄ REM / EM 単位変換&スケール表PX ⇄ REM / EM
- 22Colorコード変換&アルファ透過Color Converter
- 23MD5 / SHA-256 ハッシュ生成Hash Generator
- 24JWTデコーダー&有効期限チェッカーJWT Decoder
- 25User-Agent解析&デバイス判定User-Agent Parser
- 26UUID (v4) & ULID 一括生成UUID & ULID Generator
- 27アスペクト比計算&レスポンシブサイズAspect Ratio Calculator
- 28Markdownテーブル整形&CSV/TSV変換Markdown Table
- 29SQLクエリフォーマッター&整形SQL Formatter
- 30QRコード生成QR Code Generator
- 31正規表現テスターRegex Tester
- 32UNIXタイムスタンプ⇄日時変換Unix Time Converter
- 33新規タブメモ帳 Chrome拡張New Tab Memo
- 34画像リサイズ&クロップImage Resizer
- 35EXIF情報の確認&除去EXIF Viewer
- 36robots.txt ジェネレーターrobots.txt Generator
- 37安全なパスワード生成Password Generator
- 38文字列ケース変換Case Converter
- 39CSV/TSV ⇄ JSON 相互変換CSV ⇄ JSON
- 40PDF結合・分割・ページ抽出PDF Merge & Split
- 41全角⇄半角変換&テキストクリーナーZenkaku ⇄ Hankaku
- 42X(Twitter)投稿の文字ウェイト計算X Post Counter
- 43CSS clamp() フルイドタイポグラフィ計算機CSS clamp() Calculator
- 44CSSグラデーションジェネレーターCSS Gradient Generator
- 45画像からカラーパレット抽出Palette Extractor
- 46QRコード読み取りQR Code Reader