edo1z blog

プログラミングなどに関するブログです

SVGでロゴを作成してみる

SVGはベクター画像。PNGはラスター画像。ラスター画像は、1ピクセル x 1ピクセルを色で表現するもの。ベクターは頂点座標と線の種類・太さとかで表現するもの。ベクターは拡大・縮小しても頂点座標とか計算できるので、画像がぼやけたり、文字がつぶれたりしない。

XMLで書いてみる

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 70">
    <polygon id="poly" points="35,0 28.5,11 41.5,11" style="fill:gray;"/>
    <use xlink:href="#poly" transform="rotate(30, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(60, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(90, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(120, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(150, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(180, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(210, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(240, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(270, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(300, 35, 35)"/>
    <use xlink:href="#poly" transform="rotate(330, 35, 35)"/>
    <circle cx="35" cy="35" r="25" fill="#c21"/>
    <circle cx="35" cy="35" r="20" fill="#d80"/>
    <circle cx="35" cy="35" r="15" fill="#fff"/>
    <circle cx="35" cy="35" r="10" fill="#b50"/>
    <circle cx="35" cy="35" r="5" fill="#fb5"/>
</svg>

logicky.svgで保存したらsvgファイルが出来上がります。1KBと書いてある。

圧縮する

$ gzip logicky.svg

できたファイルを、logicky.svgzとします。これが圧縮されたSVGファイルで、ブラウザでも大体表示できます。(ローカル環境のchromでしか確認していません)サイズは385バイトと書いてある。pngで作ったロゴは64x64で3KBだから、全然違う。

Wordpressにアップしようと思ったらセキュリティの関係上アップロードできません的なエラーが表示された。SVGに対応していないらしい。

HTMLで表示させる

<html>
<head></head>
<body>
<h1>Test</h1>
<img src="logicky.svgz" width=100 height=100>
<p>上記はSVGロゴです。</p>
</body>
</html>

スクリーンショット 2015-09-29 5.34.59

imgタグのwidthとheightを500に変えるだけで、拡大された画像がきれいに表示されます。

スクリーンショット 2015-09-29 5.35.38