はい、CSSスプライトを作成するためのツールがあります。 私もそのような
サービスを作り
ました 。 しかし、彼らは時々壊れます(今のように、私のもの)。 しかし、チームには多くの価値があり、
imagemagickです。 コマンドラインからのみCSSスプライトを作成する方法を見てみましょう。
写真を作成する
まず、個々のファイルのリストがあります。
$ ls
1.png 2.gif dot.png phoney.gif tw.gif
- -1.png
- -2.gif
- -dot.png
- -phoney.gif
- -tw.gif
それらからスプライトを作りましょう:
$ convert *png *gif -append result/result-sprite.png
はい、それだけです。 結果を見ます。
詳細
imagemagickコマンドは通常次のようになります。
$ convert image1.png image2.png image3.png -append result/result-sprite.png
写真のリストをアスタリスクに置き換えることができます。
$ convert * -append result-sprite.png
または、前のケースのように、マスク* .gifおよび* .png。
水平スプライトはどうですか? 必要なのは、-appendを+ appendに置き換えるだけです:
$ convert *png *gif +append result/result-sprite-horizon.png
結果:
また、ソース画像は任意の形式(GIF、PNG、JPEG)にできることに注意してください。出力はPNGです。 PNG8から始めることをお勧めします。
$ convert *png *gif -append PNG8:result/result-sprite-horizon.png
CSS
これらはすべて手動操作であるため、CSSは自動的に生成されません。 しかし、それも非常に簡単です。 垂直スプライトを取得します。
すべての画像のbackground-position-xプロパティは0pxに設定されます。
最初の16x16ピクチャのbackground-position-y座標も0pxです。 次に:
.first { width: 16px; height: 16px; background: url(result/result-sprite.png) 0 0; }
...座標0 0はオプションであり、省略できます。
2番目の画像も16x16なので、より便利です。 そのX座標は0で、Yは反対の符号を持つ前の画像の高さです。
.second { width: 16px; height: 16px; background: url(result/result-sprite.png) 0 -16px; }
などなど。 Y座標=前の要素のY-前の要素の高さ。
しかし...しかし...サイズを見つけて高さを追跡するたびに? 冗談ですか
Imagemagickが助けになります。
'identify'を使用すると、画像に関する基本情報を取得できます。
$ identify 1.png
1.png PNG 16x16 16x16 + 0 + 0 DirectClass 8ビット260b
'identify'にはオプション
'-format'もあり、マスク*をサポートしています。 したがって、快適な方法ですべての情報を取得するのは簡単です。
$ identify -format "%g - %f\n" *
16x16 + 0 + 0-1.png
16x16 + 0 + 0-2.gif
6x6 + 0 + 0-dot.png
10x16 + 0 + 0-phoney.gif
16x16 + 0 + 0-tw.gif
%fはファイル名、%gはジオメトリです。
\ n-簡単に表示するための改行。
したがって、5つの要素のY座標を取得する場合は、前の要素の高さを合計します:16 + 16 + 6 + 16
.last { width: 16px; height: 16px; background: url(result-sprite.png) 0 -54px }
いくつかの最適化
Imagemagickは最適化されたPNGを生成しないため、最適化はほとんど必要ありません。
pngout、optipngなどを使用できます
。 または
smush.itや
punypng.comなどのWebツール。
または、コマンドラインでsmush.itについて:
$ curl http://www.smushit.com/ysmush.it/ws.php?img=http://www.phpied.com/files/sprt/result/result-sprite.png
結果-JSONオブジェクト:
{"src": "http:\ / \ / www.phpied.com \ / files \ / sprt \ / result \ /result-sprite.png"、
「src_size」:1759、
"dest": "http:\ / \ / smushit.zenfs.com \ / results \ / 5a737623 \ / smush \ /%2Ffiles%2Fsprt%2Fresult%2Fresult-sprite.png"、
「dest_size」:1052
「パーセント」:「40.19」、
「id」:「」}
ほぼ2回保存。 「dest」フィールドをコピーします
$ curl http:\/\/smushit.zenfs.com\/results\/5a737623\/smush\/%2Ffiles%2Fsprt%2Fresult%2Fresult-sprite.png > result/smushed-sprite.png
以上です。
まとめると
1.スプライトを作成します。
$ convert *png *gif -append PNG8:result/result-sprite.png
2.サイズを取得します。
$ identify -format "%g - %f\n" *png *gif
3.そして最適化:
$ curl http://www.smushit.com/ysmush.it/ws.php?img=http://url...
Stoyan Stefanovの記事
Command-line CSS spritingの翻訳 。
PS ImageMagickテーマはすでにハブで
言及されていましたが、この記事の2番目の部分は便利に思えたので、全体を翻訳することにしました。