SVGのファイルサイズを小さくするツール

Adobe IllustratorInkscape や sodipodi などのソフトで作った SVG ファイルは、不要な要素などが含まれていたりして、けっこうサイズが大きくなったりする。

SVG というのは単なるテキストファイルなので、普通にエディタで開いて人力でチマチマ頑張ればサイズを小さくすることもできるのだけど、そういうこと (圧縮というより整形と言ったほうがいいかな) を自動でやってくれるツールがある。

Scour という Pythonスクリプト

使い方は簡単。

  • まず、Python が入ってることを確認する。Mac OS XUbuntu なら最初から入ってるので問題ない。Windows の人は、頑張ってください。
  • http://www.codedread.com/scour/ の一番下のほうからダウンロードする。(自分は現在の最新版の http://www.codedread.com/scour/scour-0.14.tar.gz をダウンロードした)
  • ダウンロードしたファイルを展開すると、scour.py というファイルが入っているので、それを以下のように使う。
$ python scour.py -i input.svg -o output.svg

scour.py をパスの通ったディレクトリに入れておくと、

$ scour.py -i input.svg -o output.svg

とするだけでいい。

また、SVGZ (SVG をさらに GZIP で圧縮した形式) にも対応しているので、

$ scour.py -i input.svg -o output.svgz

と、拡張子を svgz にすると、自動で SVGZ にしてくれる。

どのぐらい小さくなるか

Wikipedia から適当に持ってきたファイルで試す。

Tux.svg

これで実行すると、こんな感じになる。

% python scour.py -i Tux.svg -o Tux2.svg
scour 0.14
Copyright Jeff Schiller, 2009
 File: Tux.svg 
 Time taken: 36.9666666667s 
 Number of elements removed: 75 
 Number of attributes removed: 0 
 Number of unreferenced id attributes removed: 0 
 Number of style properties fixed: 26 
 Number of raster images embedded inline: 0 
 Number of path segments reduced/removed: 0 
 Number of bytes saved in path data: 82112 
 Number of bytes saved in colors: 246 
 Number of points removed from polygons: 0
 Original file size: 303352 bytes; new file size: 204136 bytes (67.29%)
ファイル サイズ
オリジナル 303352バイト
整形 204136バイト
整形+SVGZ圧縮 73123バイト

整形すると3分の2程度になる。

36秒もかかっているのがちょっと難点だけど、何度も圧縮するものでもないと思うので、問題ないと思う。

もう一つ

BlankMap-Africa.svg

% python scour/scour.py -i BlankMap-Africa.svg -o Africa.svg
scour 0.14
Copyright Jeff Schiller, 2009
 File: BlankMap-Africa.svg 
 Time taken: 12.2333333333s 
 Number of elements removed: 1 
 Number of attributes removed: 0 
 Number of unreferenced id attributes removed: 0 
 Number of style properties fixed: 0 
 Number of raster images embedded inline: 0 
 Number of path segments reduced/removed: 15 
 Number of bytes saved in path data: 101377 
 Number of bytes saved in colors: 0 
 Number of points removed from polygons: 0
 Original file size: 188987 bytes; new file size: 87234 bytes (46.15%)
ファイル サイズ
オリジナル 188987バイト
整形 87234バイト
整形+SVGZ圧縮 31668バイト

整形だけで半分以下になった。かかった時間も12秒程。

あれこれ

  • Ruby で書かれた SVG Tidy というスクリプトもあるけど、試したところ、全然小さくならなかった。使い方間違ってるのかな?