CSS рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрдкреНрд░рд╛рдЗрдЯ

рд╣рд╛рдБ, CSS рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЙрдкрдХрд░рдг рдореМрдЬреВрдж рд╣реИрдВред рдореИрдВрдиреЗ рднреА рдРрд╕реА рд╣реА рдПрдХ рд╕реЗрд╡рд╛ рдХреА ред рд▓реЗрдХрд┐рди рд╡реЗ рд╕рдордп-рд╕рдордп рдкрд░ (рдЕрдм, рдореЗрд░рд╛) рддреЛрдбрд╝рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЯреАрдо рдПрдХ рдмрд╣реБрдд рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдЗрдореЗрдЬрдореИрдЬрд┐рдХ рд╣реИ ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХреЗрд╡рд▓ рд╕реАрдПрд╕рдПрд╕ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:

$ ls
      
      





  1.рдкрд┐рдВрдЧ рдХрд░реЗрдВ 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ред

рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ + рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде:

 $ 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 рдж рдЗрдореЗрдЬрдореИрдЬрд┐рдХ рдереАрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣рдм рдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдереА, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдореБрдЭреЗ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред



All Articles