рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
$ ls
1.рдкрд┐рдВрдЧ рдХрд░реЗрдВ 2.gif dot.png phoney.gif tw.gif
- - 1.рдкрдВрдЧ
- - 2.рдЧрдл
- - 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ред
рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ + рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде:
$ convert *png *gif +append result/result-sprite-horizon.png
рдкрд░рд┐рдгрд╛рдо:
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрд░реЛрдд рдЪрд┐рддреНрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - GIF, PNG, JPEG, рдЖрдЙрдЯрдкреБрдЯ PNG рд╣реИред рдореИрдВ PNG8 рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛:
$ convert *png *gif -append PNG8:result/result-sprite-horizon.png
рд╕реАрдПрд╕рдПрд╕
рдЪреВрдВрдХрд┐ рдпреЗ рд╕рднреА рдореИрдиреБрдЕрд▓ рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рд╕реАрдПрд╕рдПрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд▓реЗрдВ:
рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреА рдкреГрд╖реНрдарднреВрдорд┐-рд╕реНрдерд┐рддрд┐-x рд╕рдВрдкрддреНрддрд┐ 0px рдкрд░ рд╕реЗрдЯ рд╣реЛрдЧреАред
рдкрд╣рд▓реЗ 16x16 рдЪрд┐рддреНрд░ рдореЗрдВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб-рдкреЛрдЬрд┐рд╢рди-y рд╕рдордиреНрд╡рдп рднреА 0px рд╣реИред рддрдм:
.first { width: 16px; height: 16px; background: url(result/result-sprite.png) 0 0; }
... рдЬрд╣рд╛рдБ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ 0 0 рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ рдФрд░ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рддрд╕реНрд╡реАрд░ рднреА 16x16 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХреНрд╕ рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯ 0 рд╣реИ, рдФрд░ рд╡рд╛рдИ рдкрд┐рдЫрд▓реА рддрд╕реНрд╡реАрд░ рдХреА рдКрдБрдЪрд╛рдИ рдкрд░ рд╡рд┐рдкрд░реАрдд рдЪрд┐рдиреНрд╣ рдХреЗ рд╕рд╛рде рд╣реИ:
.second { width: 16px; height: 16px; background: url(result/result-sprite.png) 0 -16px; }
рдФрд░ рдЗрд╕реА рддрд░рд╣ред Y рд╕рдордиреНрд╡рд┐рдд = рдкрд┐рдЫрд▓реЗ рддрддреНрд╡ рдХрд╛ Y - рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рдКрдВрдЪрд╛рдИред
рд▓реЗрдХрд┐рди ... рд▓реЗрдХрд┐рди ... рд╣рд░ рдмрд╛рд░ рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдХреНрдпрд╛ рддреБрдо рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реЛ?
Imagemagick рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред 'рдкрд╣рдЪрд╛рди' рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
$ identify 1.png
рдкреАрдПрдирдЬреА 16x16 16x16 + 0 + 0 DirectClass 8-рдмрд┐рдЯ 260 рдмреА
'рдкрд╣рдЪрд╛рди' рдХреЗ рдкрд╛рд╕ '-рдлреЙрд░реНрдо' рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ рдФрд░ рдорд╛рд╕реНрдХ * рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реБрдЦрдж рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
$ identify -format "%g - %f\n" *
16x16 + 0 + 0 - 1. рдкреАрдПрдирдЬреА 16x16 + 0 + 0 - 2. рдЬреАрдЖрдИрдПрдл 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 рдЕрдиреБрдХреВрд▓рд┐рдд PNGs рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдЖрдк pngout, Optipng, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╛ smush.it рдпрд╛ punypng.com рдЬреИрд╕реЗ рд╡реЗрдм рдЯреВрд▓ред
рдпрд╛ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ ... рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ 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", "рдЖрдИрдбреА": ""}
рд▓рдЧрднрдЧ рджреЛ рдмрд╛рд░ рдмрдЪрддред "рднрд╛рдЧреНрдп" рдлрд╝реАрд▓реНрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ
$ 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 рдХреЗ рд▓реЗрдЦ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕реАрдПрд╕рдПрд╕ рд╕реНрдкреНрд░рд┐рдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж ред
PS рдж рдЗрдореЗрдЬрдореИрдЬрд┐рдХ рдереАрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣рдм рдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдереА, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдореБрдЭреЗ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред