ãããã£ãŠãWebã¯æ£åžžã«æ©èœããŸãããããŸããŸãªãµã€ãºã®åçãããŸããŸãªãŠãŒã¶ãŒã«é ä¿¡ããã«ã¯ãæåã«ããããã¹ãŠã®åçãäœæããå¿ èŠããããŸãã
å€ãã®ããŒã«ã¯ãµã€ãºãå€æŽããŸãããã¬ã¹ãã³ã·ãç»åã«äŒŽãããã©ãŒãã³ã¹ã®åäžãç¡å¹ã«ãã倧ããªãã¡ã€ã«ãäœæããããšãå€ãããŸãã åªããå質ãç¶æããå°ããªãã¡ã€ã«ãååŸããªãããã³ãã³ãã©ã€ã³ããŒã«ã§ããImageMagickã䜿çšããŠç»åã®ãµã€ãºããã°ããå€æŽããæ¹æ³ãèŠãŠã¿ãŸãããã
倧ããªåç==倧ããªåé¡
å¹³åçãªWebããŒãžã®ééã¯2 MBã§ããã®ãã¡2/3ã¯åçã§ãã äœçŸäžäººãã®äººã ã3Gãä»ããŠãªã³ã©ã€ã³ã«ã¢ã¯ã»ã¹ããŠããŸãã ãããã®å Žåã®2MBãµã€ãã¯ã²ã©ãåäœããŸãã é«éæ¥ç¶ã§ãããã®ãããªãµã€ãã¯ãã©ãã£ãã¯å¶éã䜿ãæããå¯èœæ§ããããŸãã Webãã¶ã€ããŒãšéçºè ã®ä»äºã¯ããŠãŒã¶ãŒã®ç掻ãç°¡çŽ åããæ¹åããããšã§ãã
éåžžã«å°ããªãµã€ãã§ã¯ããã¹ãŠã®ç»åã®ããªãšãŒã·ã§ã³ãç°¡åã«ä¿åã§ããŸãã ããããããããªãã圌ãã®dofigãæã£ãŠãããšãããïŒ ããšãã°ãåºèã§ã¯æ°åäžæã®åçãååšããå¯èœæ§ããããŸã-æåã§ããªã¢ã³ããäœæããªãã§ãã ããã
Imagemagick
25幎åã®ã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã¯ãåæã«ãã«æ©èœã®ç»åãšãã£ã¿ãŒã§ããããŸãã ããã«ã¯èšå€§ãªæ°ã®æ©èœãããããã®äžã«ã¯ãåçã®é«éã§èªåã®ãµã€ãºå€æŽããããŸãã ããããããã©ã«ãã®èšå®ã§ã¯ããã¡ã€ã«ã¯éåžžã«å€§ãããªãããšããããããŸã-ãã¯ã»ã«ã¯å°ãªãã§ãããããªã¥ãŒã ãå ã®ãµã€ãºããã倧ããå ŽåããããŸãã 次ã«ãåé¡ãäœã§ãããã説æããããã解決ããããã«å¿ èŠãªèšå®ã瀺ããŸãã
ç»åã®ãµã€ãºå€æŽã®ä»çµã¿
å®çŸ©ã«ãããç»åã®ãµã€ãºãå€æŽãããšãç»åã®ãã¯ã»ã«æ°ãå€ãããŸãã å¢å ãããšãåºåã¯å ¥åãããå€ãã®ãã¯ã»ã«ãæã¡ãŸãã æžå°-å察ã«ã 課é¡ã¯ãç°ãªããã¯ã»ã«æ°ã䜿çšããŠå ã®ç»åã®å 容ãä¿åããæè¯ã®æ¹æ³ã§ãã
ç»åãæ¡å€§ãããšæåãç°¡åã«ãªããŸãã®ã§ãå§ããŸãããã 4x4ãã¯ã»ã«ã®æ£æ¹åœ¢ã®ç»åãèããŠã¿ãŸããããããã8x4ã«åå¢ãããŸãã å®éããã®åçãæ®ããæ°ããã°ãªããã«åŒã蟌ã¿ãŸã-ããã¯ãªãµã³ããªã³ã°ãšåŒã°ããŸãã 8x8ã§4x4ã®ç»åããµã³ããªã³ã°ããã«ã¯ã48åã®äœåãªãã¯ã»ã«ãã©ããã«æ¿å ¥ããå¿ èŠããããŸãã ãããã¯ããçš®ã®è²ãæããªããã°ãªããŸãã-ãã®éžæã®ããã»ã¹ã¯è£éãšåŒã°ããŸãã ãµã³ããªã³ã°ãããšããè£éã®åäœãéžæããã¢ã«ãŽãªãºã ã¯ããµã³ããªã³ã°ãã£ã«ã¿ãŒãšåŒã°ããŸãã
ãã®ãããªãã£ã«ã¿ãŒã¯å€æ°ãããŸãã æãç°¡åãªæ¹æ³ã¯ãä»»æã®è²ã®4ã€ã®è¡ãš4ã€ã®åãè¿œå ããããšã§ãã ããŠãèµ€ãšèšããŸãã ããã¯ãèæ¯è²ïŒèµ€ïŒã空ã®å Žæã«è¡šç€ºãããå Žåã®èæ¯è£éã«ãªããŸãã Photoshopã§ã¯ãããã¯ãç»åãâãç»åãµã€ãºãã§ã¯ãªããç»åãâããã£ã³ãã¹ãµã€ãºãã§è¡ãããŸãã
ãã¡ãããããã¯ç§ãã¡ã«ã¯åããªãã§ãããã åçã¯å ã®åçãšã¯ç°ãªããŸãã èæ¯è£éã¯ãæ°ãããã¯ã»ã«ãè¿œå ããããã«ã®ã¿äœ¿çšãããããã§ããµã€ãºå€æŽã®éã«ã¯åœ¹ã«ç«ã¡ãŸããã
ãã1ã€ã®åçŽãªè£éïŒæ°ãããã¯ã»ã«ã®è²ãé£æ¥ãã¯ã»ã«ãšåãã«ããïŒã¯ãæãè¿ãé£æ¥ãã¯ã»ã«ã«å¯Ÿããè£éã§ãã åçãç¹ã«ç§ãã¡ã®åºå Žã§ã¯ãçµæã¯ãã£ãšè¯ããªããŸãã
ããŠã³ãµã³ããªã³ã°ãã€ãŸãç»åãçž®å°ãããšãæè¿åãè£éããããšã¯ããã»ã©å®¹æã§ã¯ãããŸããã æ°åŠçç®çã®ããã«ãåæ°ãã¯ã»ã«ã§æäœããããšãå¯èœã§ããããšãåãå ¥ããªããã°ãªããŸããã ãŸããå ã®ç»åã«æ°ããã°ãªãããé©çšãããŸãã ãã¯ã»ã«ã¯å°ãããªã£ãã倧ãããªã£ãããããããããã€ãã®ãã¯ã»ã«ã«ã¯ããã€ãã®è²ãå«ãŸããŠããŸãã
ãã ããå®éã®ãã¯ã»ã«ã«ã¯1è²ãããããŸããã æ°ããã°ãªããã®åãã¯ã»ã«ã®çµæã®è²ã¯ããã®äžå¿ã®è²ã«ãã£ãŠæ±ºãŸããŸãã ãã®ãããæžå°ãããšãã®æè¿åã®è£éã¯ããã€ã³ããµã³ããªã³ã°ãšåŒã°ããããšããããŸãã
ãããããããç·ãæ£æ¹åœ¢ãããè€éãªãã®ã§ããå Žåããã®ãããªæ¹æ³ã§ã¯ã®ã¶ã®ã¶ã®æ£æ¹åœ¢ã®ç»åãçæãããŸãã éãåäœããå°ããªãã¡ã€ã«ãçæããŸãããèŠãç®ãæªãã§ãã
ã»ãšãã©ã®ãã£ã«ã¿ãŒã¯ãæè¿åã®è£éããªãšãŒã·ã§ã³ã䜿çšããŸã-è€æ°ã®ãã€ã³ãã§ã¹ããããµã³ããªã³ã°ãè¡ããäœããã®æ¹æ³ã§ãããã®ç¹å®ã®å¹³åè²ãèšç®ããŸãã ãã€ãªãã¢è£éã§ã¯ãè²ã®å éå¹³åãèæ ®ãããŸãã
ãããããã®ãããªãã£ã«ã¿ãŒã¯ãäžžã¿ã垯ã³ããšããžãšãšãã«æ°ããè²ãè¿œå ããããããã¡ã€ã«ãµã€ãºã«åœ±é¿ããŸãã å ã®ç»åã«ã¯2è²ãããããŸããã§ããããçŸåšã¯ããã«å€ãã®è²ããããŸãã ãã®ä»ã®æ¡ä»¶ãåãã§ããã°ãè²ãå€ãã»ã©ãã¡ã€ã«ã¯éããªããŸãã
ãããŠãããã¯ç§ãã¡ã«ãšã£ãŠäœãæå³ããã®ã
å質ãæãªãããšãªããäœãšãè²æ°ãæžããå¿ èŠããããŸãã ããã¯ããã£ã«ã¿ãŒã®éžæã«ãã£ãŠæã圱é¿ãåããŸãããä»ã®èšå®ã圱é¿ããŸãã
ImageMagickã®æé©ãªèšå®
ImageMagickã®åºæ¬
ImageMagickã«ã¯å€ãã®èšå®ãšæ©èœããããæ£ãããã®ãèŠã€ããã®ã¯ããªãé£ããã§ãã å€æãšmogrifyã®2ã€ã®é¢æ°ã«èå³ããããŸãã ãããã¯åæ§ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãããmogrifyã¯äžåºŠã«è€æ°ã®ãã¡ã€ã«ãåŠçããäžåºŠã«1ã€ãã€å€æããŸãã
ç°¡åãªæäœïŒ
convert input.jpg -resize 300 output.jpg
ãã®å ŽåãIMã¯input.jpgãååŸãããã¯ã»ã«å¹ ã«ãµã€ãºå€æŽããŠãçµæãoutput.jpgã«ä¿åããŸãã -resize 300é¢æ°ã¯ãå€ãã®é¢æ°ã®1ã€ã®äŸã§ãã ãããã¯ãã¹ãŠã-functionNameãªãã·ã§ã³ãšãã1ã€ã®åœ¢åŒã§ãã
mogrifyãå°ãè¿œå ããŠäœ¿çšããããšãã§ããŸãã
mogrify -path output/ -resize 300 *.jpg
ããã§ã¯ãIMã¯ãã¹ãŠã®JPEGãã¡ã€ã«ãçŸåšã®ãã£ã¬ã¯ããªïŒ* .jpgïŒããååŸããå¹ ã300ãã¯ã»ã«ã«ãµã€ãºå€æŽããŠåºåãã£ã¬ã¯ããªã«ä¿åããŸãã
æ©èœã¯çµã¿åãããããšãã§ããŸãïŒ
convert input.jpg -resize 300 -quality 75 output.jpg
ãŸããinput.jpgã®ãµã€ãºã300ãã¯ã»ã«ã«å€æŽããŸãããoutput.jpgã«ä¿åããåã«JPEGå質ã75ã«èšå®ããŸãã
ãã¹ããšçµæ
ããŸããŸãªIMèšå®ããã¹ãããªãã ãPhotoshopã®ãWebçšã«ä¿åããªãã·ã§ã³ãšåºå¥ãããªãããã«ãå質ãç ç²ã«ããããšãªããã¡ã€ã«ã®ãµã€ãºãçž®å°ããããšããŸããã ãã¹ãã«ã¯äž»èŠ³çãªæèŠãšå®¢èŠ³çãªæèŠã®äž¡æ¹ã䜿çšããŸãã- æ§é ã®éã ïŒæ§é ã®çžéç¹ãDSSIMïŒã枬å®ããŸããã DSSIMã¯2ã€ã®åçãæ¯èŒããè©äŸ¡ãäžããŸãã ã¹ã³ã¢ãäœãã»ã©ãããé¡äŒŒããŠããŸãã 0ã¯IDãæå³ããŸãã ç§ã¯0.0075以äžã®DSSIMã¹ã³ã¢ãéæããŸããã ãŸããæšå¹Žã®ãã調æ»ã§ã¯ãéåžžãDSSIMã0.015æªæºã®äººã¯ç®ã®åçã§åºå¥ã§ããªãããšãããããŸããã
JPEG圢åŒãšPNG圢åŒã§ããŸããŸãªãµã€ãºã®ããŸããŸãªç»åããã¹ãããçµæã次ã®IMèšå®ã§ã¯ãPhotoshopã®åºåãšã»ãšãã©åºå¥ã§ããªãæå°ã®çµæãçæããããšããçµè«ã«éããŸããã
mogrify -path OUTPUT_PATH -filter Triangle -define filter:support=2 -thumbnail OUTPUT_WIDTH -unsharp 0.25x0.25+8+0.065 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -strip INPUT_PATH
ãããããã詳现ã«åæããŸãããã
MogrifyãŸãã¯Convert
IMã¯å€æã䜿çšããŠã€ã¡ãŒãžã1ã€ãã€åŠçãããããåŠçã«ã¯éåžžmogrifyãå¿ èŠã§ãã çæ³çãªäžçã§ã¯ã圌ãã®ä»äºã®çµæã¯äžèŽããã¯ãã§ãã æ®å¿µãªããã convertã«ã¯ãšã©ãŒãããããã®ããèšå®ã®äžéšãç¡èŠãããããïŒ-define jpegïŒfancy-upsampling = offïŒãmogrifyã䜿çšããå¿ èŠããããŸããã
åãµã³ããªã³ã°
IMã®ãµã³ããªã³ã°ãã£ã«ã¿ãŒã®éžæã¯ãäœããã®çç±ã§æ··ä¹±ããŠããŸãã ãããè¡ãã«ã¯3ã€ã®æ¹æ³ããããŸãã
- ãµã€ãºå€æŽæ©èœãéžæããããšã«ãã
- -filterãªãã·ã§ã³ã䜿çšãã
- ãŸãã¯-interpolateãªãã·ã§ã³
12çš®é¡ã®ãµã€ãºå€æŽæ©èœã®äŸ
æãæãããªäœ¿çšæ³ã¯-resizeã§ãããçµæã¯å€§ããããŸãã 11çš®é¡ã®æ©èœã確èªããŸãããããµã ãã€ã«ã¯ãµã€ãºãšå質ã®äž¡æ¹ã§çž®å°ã«æé©ã§ãã ãã®é¢æ°ã¯3段éã§æ©èœããŸãã
- ç¬èªã®çµã¿èŸŒã¿ãã£ã«ã¿ãŒãæã€âsampleé¢æ°ã䜿çšããŠãå¿ èŠãªãµã€ãºã®5åã®ãµã€ãºã«ç»åã®ãµã€ãºãå€æŽããŸã
- 次ã«ã-resizeã䜿çšããŠç®çã®ãµã€ãºã«å€æŽããŸã
- ç»åããã¡ã¿ããŒã¿ãåé€ããŸã
ã€ãŸããç»åã®å¹ ã500ãã¯ã»ã«ã«çž®å°ãããšã-thumbnailã¯æåã«-sampleã䜿çšããŠ2500ã«ãµã€ãºå€æŽããŸãã 次ã«ãIMã¯-resizeã䜿çšããŠ2500ãã500ã«ãµã€ãºãå€æŽããŸãã ãããŠæåŸã«ã¡ã¿ããŒã¿ãåé€ããŸãã
ãµã³ããªã³ã°ãã£ã«ã¿ãŒãéžæãã2çªç®ã®æ¹æ³ã¯ã-filterã䜿çšããããšã§ãã äžéšã®é¢æ°ã«ã¯çµã¿èŸŒã¿ã®ãã£ã«ã¿ãŒããããä»ã®é¢æ°ã«ã¯å€æŽå¯èœãªããã©ã«ãã®ãã£ã«ã¿ãŒããããŸãã âthumbnailã®2çªç®ã®ã¹ãããã§ã¯ãâresizeé¢æ°ã䜿çšããããããâfilterã䜿çšãããŸãã
-filterã®31ã®èšå®ã確èªããTriangleã䜿çšããŠæè¯ã®çµæãåŸãŸããã ãã®ãã£ã«ã¿ãŒã¯ãåç·åœ¢è£éãšãåŒã°ããŸãã é£æ¥ãããã¯ã»ã«ããå éå¹³åè²ãèšç®ããŸãã -define filterïŒsupport = 2èšå®ãšããŠãé£æ¥ãããã¯ã»ã«ã®é åãèšå®ããã®ãæåã§ããããšãããããŸããã
ãã£ã«ã¿ãŒãéžæãã3çªç®ã®æ¹æ³ã¯-interpolateã§ããã-thumbnailã䜿çšããå Žåã¯ç¡èŠãããŸãã
ãšããããIMã¯ããã©ã«ãã§JPEGãã¡ã³ã·ãŒã¢ãããµã³ããªã³ã°ãšåŒã°ããããã€ãã®æ©èœã䜿çšããŸããããã¯ããè¯ãå質ã®JPEGãçæããããšããŸãã åçã®ãµã€ãºã倧ããããã ãã§ãå質ã®éãã¯ç¡èŠã§ããã»ã©å°ããããã-define jpegïŒfancy-upsampling = offã§ãªãã«ããããšããå§ãããŸãã
ç ã
ãµã€ãºãå€æŽãããšãåçããããã«ãŒãããã®ã§ãåããã©ãã·ã§ããã¯ããŸããŸãªãã¯ããã¯ã䜿çšããŠæç床ãé«ããŸãã ã¢ã³ã·ã£ãŒããã£ã«ã¿ãŒããå§ãããŸããããã¯ãååã«ãããããããç»åã®æçããåäžããããã®ã§ãã-unsharp0.25x0.25 + 8 + 0.065ã
ãã£ã«ã¿ãŒã¯ã ã¬ãŠã¹ãŒãããæåã«é©çšãããããã«æ©èœããŸãã æåã®2ã€ã®æ°å€ã¯ãååŸãšã·ã°ãã§ãïŒãã®å Žåããããã0.25ãã¯ã»ã«ïŒã ãŒããã®åŸããã£ã«ã¿ãŒã¯ãŒãããããŒãžã§ã³ãšå ã®ããŒãžã§ã³ãæ¯èŒããæãããæå®ããããããå€ïŒ0.065ïŒãã倧ããç°ãªãå Žåãæå®ãããåã®ã·ã£ãŒããã¹ã®å¢å ãé©çšãããŸãïŒ8ïŒã
æžè²
åè¿°ããããã«ãç»åã®ãµã€ãºãå€æŽãããšãã«ãã¡ã€ã«ãµã€ãºã倧ãããªãäž»ãªçç±ã¯ãæ°ããè²ã®è¿œå ã§ãã ãããã£ãŠãå質ãæãªãããšãªãããã®æ°ãæžããããã«ããå¿ èŠããããŸãã
1ã€ã®æ¹æ³ã¯ãã°ã©ããŒã·ã§ã³ãã¯ãªã¢ã«ã©ãŒã®ã»ããã§çœ®ãæãããã¹ã¿ãªãŒãŒã·ã§ã³ã§ãã ãã¹ã¿ãªãŒãŒã·ã§ã³ã«ãããè²ã¬ãã«ã®æ°ãæžããŸã-ããã¯ãèµ€ãç·ãéã®ãã£ã³ãã«ã«æ®ã£ãŠãããªãã·ã§ã³ã®æ°ã§ãã ç»åã®è²ã®ç·æ°ã¯ããããã®ãã£ã³ãã«ã®è²ã®çµã¿åããã«ãªããŸãã
ãã¹ã¿ãªãŒãŒã·ã§ã³ã¯ãã¡ã€ã«ãµã€ãºãçž®å°ã§ããŸãããå質ãäœäžããŸãã å質ãããŸãæãªãããšãªãå°ããªãã¡ã€ã«ãååŸã§ããçªå·136ãææ¡ããŸãã
ãªãªãžãã«
æžè²
ãã£ã¶ãªã³ã°ã¯ãã«ã©ãŒã»ããã«ãã€ãºãè¿œå ããŠããå€ãã®è²ã®é¯èŠãäœæããããšã«ãããè²ãæžããå¹æã軜æžããããã»ã¹ã§ãã çè«çã«ã¯ãããã¯è¯ãã¢ã€ãã¢ã§ãã
ãã£ã¶ãªã³ã°åŸ
æ®å¿µãªãããIMã«ã¯ãšã©ãŒãããããã£ã¶ãªã³ã°æã«ç»åã®éæ床ãæãªãããŸãã ãããã£ãŠã-dither Noneã䜿çšããŠç¡å¹ã«ããããšããå§ãããŸãã 幞ããªããšã«ãããããªããŠãããã¹ã¿ãªãŒãŒã·ã§ã³ã®çµæã¯ããªãè¯ãèŠããŸãã
IMã®ãã£ã¶ãªã³ã°ãšã©ãŒ
è²ç©ºé
è²ç©ºéã¯ãéæ¥çã«ç»åå ã®è²ã®æ°ãæããŸãã ãã®ã¹ããŒã¹ã«ããã䜿çšå¯èœãªè²ã決ãŸããŸãã 次ã®å³ã¯ãProPhoto RGBè²ç©ºéã«Adobe RGBãããå€ãã®è²ãå«ãŸããŠãããAdobe RGBã«ã¯sRGBãããå€ãã®è²ãå«ãŸããŠããããšã瀺ããŠããŸãã ãããŠããããã¯ãã¹ãŠç®ã«èŠãããããå°ãªãè±ãå«ãŸããŠããŸãã
sRGBã¯ã€ã³ã¿ãŒãããè²ç©ºéã®çæ§ã«ãªããŸããã W3Cããã³ãã®ä»ã®çµç¹ã«ãã£ãŠæ¿èªãããŸããã CSS Color Module Level 3ããã³SVGããã³WebPä»æ§ã§ã®ãµããŒããå¿ èŠã§ãã PNGä»æ§ã§åç §ãããŠããŸãã Photoshopã§ã¯ãããã¯ããã©ã«ãã®è²ç©ºéã§ããããŸãã ã€ãŸããsRGBã¯Webã«æé©ãªéžæè¢ã§ãããåçãæ£ãã衚瀺ããå Žåã¯ãsRGBã䜿çšããã®ãæåã§ãã
å質ãšå§çž®
JPEGã®ãããªå質ã倱ããã圢åŒã§ã¯ãå質ãšå§çž®ã¯çŽæ¥é¢ä¿ããŸããå§çž®çãé«ãã»ã©ãå質ã¯äœããªãããã¡ã€ã«ãµã€ãºã¯å°ãããªããŸãã ãããã£ãŠããã©ã³ã¹ãèŠã€ããå¿ èŠããããŸãã
ç§ã®ãã¹ãã§ã¯ãã³ã³ãããŒã«ã®ç»åãšãã©ãã·ã§ããã¯60ã«é«ãèšå®ãããŸãããIMèšå®ã§ã¯ã82ã䜿çšããããšããå§ãããŸãããªãã§ããïŒ
å質èšå®ã¯å®éçã«JPEG圢åŒã§å®çŸ©ãããŠããªããããæšæºã§ã¯ãããŸããã Photoshopã®å質60ã¯ãããããã°ã©ã ã®å質40ãå¥ã®ããã°ã©ã ã®å質B +ããŸãã¯3çªç®ã®ãçŽ æŽããããå質ãšåãã«ãªãããšããããŸãã ç§ã®ãã¹ãã§ã¯ãPhotoshop 60ã¯ImageMagickã®-quality 82ã«å¯Ÿå¿ããããšãããããŸããã
ãŸããPNGãªã©ã®å質ãæãªãããšã®ãªã圢åŒã§ã¯ãå質ãšå§çž®ã¯é¢ä¿ãããŸããã é«å§çž®ããŠãç»åã®å€èŠ³ã¯å€ãããŸããããåŠçäžã®ããã»ããµã®è² è·ã¬ãã«ã®ã¿ã«äŸåããŸãã ã³ã³ãã¥ãŒã¿ãŒã«äœè£ããªãå Žåãæ倧PNGå§çž®ãèšå®ããªãçç±ã¯ãããŸããã
IMã®PNGå§çž®ã¯ã-define pngïŒcompression-filterã-define pngïŒcompression-levelã-define pngïŒcompression-strategyã®3ã€ã®èšå®ã§èšå®ã§ããŸãã å§çž®ãã£ã«ã¿ãŒã¯ãå§çž®ãããå¹ççã«ããããã«ããŒã¿ã䞊ã¹æ¿ãããå§çž®åã®è¿œå ã®ã¹ãããã§ãã é©å¿ãã£ã«ã¿ãªã³ã°ã䜿çšããŠããè¯ãçµæãéæããŸããïŒ-define pngïŒcompression-filter = 5ïŒã å§çž®ã¬ãã«ãæ倧9ã«èšå®ããããšããå§ãããŸãïŒ-define pngïŒcompression-level = 9ïŒã æŠç¥ã«ãã£ãŠã¢ã«ãŽãªãºã èªäœã決ãŸããŸãã ããã©ã«ãã®æŠç¥ãããæ°ã«å ¥ã£ãïŒ-define pngïŒcompression-strategy = 1ïŒã
ã¡ã¿ããŒã¿
ç»åèªäœã«å ããŠããã¡ã€ã«ã«ã¯ã¡ã¿ããŒã¿ïŒç»åãäœæããããšãã®ç»åãç»åãäœæããããã€ã¹ã«é¢ããæ å ±ïŒãå«ããããšãã§ããŸãã ãã®æ å ±ã¯çºçããŸãããç»åã®èªèã¯æ¹åãããŸãããåé€ããããšããå§ãããŸãã ãããŠã-thumbnailã¯ã¡ã¿ããŒã¿ãåé€ããããšãææããŸããããããã§ããã¹ãŠãåé€ãããããã§ã¯ãããŸããã -stripããã³-define pngïŒexclude-chunk = allã䜿çšãããšããã¹ãŠãåé€ã§ããŸãã ããã¯å質ã«åœ±é¿ããŸããã
ããã°ã¬ãã·ãã¬ã³ããªã³ã°
JPEGããã³PNGã¯ãããã°ã¬ãã·ããŸãã¯ã·ãŒã±ã³ã·ã£ã«ã¬ã³ããªã³ã°ã䜿çšããŠä¿åã§ããŸãã ããã©ã«ãã§ã¯ã2çªç®ã®ãã¯ã»ã«ã¯ããã¯ã»ã«ãäžããäžã«è¡ã§ããŒãããããšãã«å®è¡ãããŸãã ããã°ã¬ãã·ããšã¯ãç»åãåŸã ã«éä¿¡ããã³è¡šç€ºãããããšãæå³ããŸãã
JPEGã§ã¯ãããã°ã¬ãã·ãã¬ã³ããªã³ã°ã¯ä»»æã®æ°ã®ã¹ãããã§å®è¡ã§ããŸããããã¯ããã¡ã€ã«ãä¿åããããšãã«æ±ºå®ãããŸãã æåã®ã¹ãããã¯ãå šäœåã®äœè§£å床ããŒãžã§ã³ã§ãã ç»åå šäœãé«è§£å床ã§è¡šç€ºããããŸã§ãé«è§£å床ã®ååŸç¶ããŒãžã§ã³ã§è¡šç€ºãããŸãã
PNGã«ã¯ã Adam7ã€ã³ã¿ãŒã¬ãŒã¹ãšåŒã°ããããã°ã¬ãã·ãã¬ã³ããªã³ã°ã®ãããªãã®ãããã8x8ã°ãªããã«åºã¥ããŠãã¯ã»ã«ã7ã¹ãããã§è¡šç€ºãããŸãã
äž¡æ¹ã®ã¿ã€ãã®ã¬ã³ããªã³ã°ã¯ã-interlaceãä»ããŠIMã§æ§æã§ããŸãã ããããããã¯å¿ èŠã§ããïŒ
ãã®ãããªã¬ã³ããªã³ã°ã¯ããã¡ã€ã«ã®éãå¢ãããŸãã é·ãéããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããããããå«ããã¹ãã ãšèããããŠããŸããã å®å šãªç»åãããã«èªã¿èŸŒãŸããªãå Žåã§ããäœããèªèããäœããªãããã¯ãŸãã§ãã
æšå¹Žã調æ»ã®çµæã«ãããšããŠãŒã¶ãŒã¯äžè²«ããã¬ã³ããªã³ã°ã奜ãããšãæããã«ãªããŸããã ããã¯ã»ãã®äžäŸã§ãããããã§ãèå³æ·±ãã§ãã ããã§ãã-interlace noneãã䜿çšããŠã·ãŒã±ã³ã·ã£ã«ã¬ã³ããªã³ã°ã䜿çšããããšããå§ãããŸãã
ç»åã®æé©å
æé©åã«ã€ããŠèšåããŸããã ç»åãæé©åããªãå Žåã¯ããããŸã§ã«èª¬æãããã¹ãŠã®èšå®ããå§ãããŸãã ããããæé©åã§ããå Žåã¯ãããããå€æŽããŸãïŒ-unsharpèšå®ã®å°ããªå€æŽã¯ããè¯ãæ©èœãïŒ-unsharp 0.25x0.08 + 8.3 + 0.045察-unsharp 0.25x0.25 + 8 + 0.065æé©åãªãïŒã-stripã䜿çšããå¿ èŠã¯ãããŸããã
mogrify -path OUTPUT_PATH -filter Triangle -define filter:support=2 -thumbnail OUTPUT_WIDTH -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB INPUT_PATH
å€ãã®ãªããã£ãã€ã¶ãŒããããŸãã image_optim ã picopt ãããã³ImageOptimããã¹ãããŸããã ããããã¯ãã¹ãŠãäžé£ã®ç°ãªãæé ã§åçãå®è¡ããŸãã äžåºŠã«1ã€ãã€ç¢ºèªãã3ã€ãã¹ãŠããªã¹ããããŠããé ã«å®è¡ããæ¹ããããšããçµè«ã«éããŸããã ãã ããimage_optimã䜿çšããåŸãpicoptãšImageOptimã®å©ç¹ã¯æå°éã«ãªããŸãã äœåãªæéãšããã»ããµãã¯ãŒããªãå Žåãè€æ°ã®æé©åã䜿çšãããšéå°ã«ãªããŸãã
çµæïŒãããŠãããã»ã©èŠããããšã¯äŸ¡å€ããããŸãããïŒïŒ
ãã¡ãããç§ã®èšå®ã¯è€éã§ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«å¿ èŠã§ãã ãã¹ãã«æéãè²»ãããããšã§ãå質ãæãªãããšãªããã¡ã€ã«ã®éãå€§å¹ ã«æžããããšãã§ããããšãå¬ããæããŸãã
Photoshopã®ãªãã·ã§ã³ãWebçšã«ä¿åããšæ¯èŒããŠãå¹³åãã¡ã€ã«ãµã€ãºã¯35ïŒ æžå°ããŸããã
Photoshop Creative Cloudãšã®æ¯èŒ
æé©åãªãã®ç§ã®èšå®ã¯ãæé©åããã®photoshopãããåªããŠããããšãå€æããŸããïŒ
IMã€ã¡ãŒãžã®ãµã€ãºãå€æŽãããšãã®ããã©ã«ãèšå®ãšæ¯èŒããŠãç§ã®æšå¥šäºé ã¯å¹³å82ïŒ ã§åã¡ãŸããã
ImageMagickããå éšãã§äœ¿çšããWordPressã®ããã©ã«ãèšå®ãšæ¯èŒããŠãç§ã®èšå®ã¯å¹³å77ïŒ ãç²åŸããŸããã
ImageMagickã䜿çšããä»ã®CMSãããŒã«ãšæ¯èŒããŠãç§ã®èšå®ã¯æ倧144ïŒ åã¡ãŸããã
ãã¹ãŠã®åçãPhotoshopã®åºåãšèŠåããã€ããªãããšãå€æããããšãæãåºããŸãã
ããããããžã§ã¯ãã«å®è£ ããæ¹æ³
ããã·ã¥ã·ã§ã«
ããã§ããã¯ãé¢æ°ã.bash_aliasesïŒãŸãã¯.bashrcïŒãã¡ã€ã«ã«è¿œå ã§ããŸããããã«ãããæšå¥šãããã³ãã³ãã眮ãæããããŸãã
smartresize() { mogrify -path $3 -filter Triangle -define filter:support=2 -thumbnail $2 -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB $1 }
ãããŠã次ã®ããã«åŒã³åºãå¿ èŠããããŸãã
smartresize inputfile.png 300 outputdir/
Node.js
imagemagickãšããnpmããã±ãŒãžã䜿çšãããšãImageMagickã䜿çšã§ããŸãã 䜿çšããå Žåã次ã®ããã«ãµã€ãºå€æŽé¢æ°ãè¿œå ã§ããŸãã
var im = require('imagemagick'); var inputPath = 'path/to/input'; var outputPath = 'path/to/output'; var width = 300; // output width in pixels var args = [ inputPath, '-filter', 'Triangle', '-define', 'filter:support=2', '-thumbnail', width, '-unsharp 0.25x0.25+8+0.065', '-dither None', '-posterize 136', '-quality 82', '-define jpeg:fancy-upsampling=off', '-define png:compression-filter=5', '-define png:compression-level=9', '-define png:compression-strategy=1', '-define png:exclude-chunk=all', '-interlace none', '-colorspace sRGB', '-strip', outputPath ]; im.convert(args, function(err, stdout, stderr) { // do stuff });
ããªã声
Gruntã䜿çšããŠã¿ã¹ã¯ãå®è¡ããå Žåãç§ã¯ããªãã®ããã«grunt-respimg ïŒ npm ïŒãšåŒã°ããã¿ã¹ã¯ãç¹å¥ã«äœæããŸããã 次ã®ããã«ãããžã§ã¯ãã«å«ããããšãã§ããŸãã
npm install grunt-respimg --save-dev
ãããŠãããã¯Gruntãã¡ã€ã«ã§è¡ãããšãã§ããŸãïŒ
grunt.initConfig({
respimg: {
default: {
options: {
widths: [200, 400]
},
files: [{
expand: true,
cwd: 'src/img/',
src: ['**.{gif,jpg,png,svg}'],
dest: 'build/img/'
}]
}
},
});
grunt.loadNpmTasks('grunt-respimg');
Php
PHPã§ã¯ãImageMagickã¯Imagickãšããååã§çµ±åãããŠããŸãã æ®å¿µãªãããããã«ã¯å¶éããããç§ãæšå¥šãããã¹ãŠã®ããšãè¡ãæ¹æ³ãããããŸãããç¹ã«ããµã ãã€ã«æ©èœã䜿çšããããã«ãµã³ããªã³ã°ãã£ã«ã¿ãŒãæ§æããŸãã
ããããããªãã¯å¹žéã§ã-ããªããå¿ èŠãšãããã¹ãŠãè¡ãphp-respimg ïŒ packagist ïŒã¢ãžã¥ãŒã«ãäœæããŸããã Composerã䜿çšããŠãããžã§ã¯ãã«å«ããããšãã§ããŸãã
composer require nwtn/php-respimg
ãããŠã次ã®ããã«ç»åã®ãµã€ãºãå€æŽããŸãã
require_once('vendor/autoload.php'); use nwtn\Respimg as Respimg; $image = new Respimg($input_filename); $image->smartResize($output_width, 0, false); $image->writeImage($output_filename);
ã³ã³ãã³ã管çã·ã¹ãã
CMSãPHPã§å®è¡ããå Žåã¯ããPHPãã»ã¯ã·ã§ã³ã«é²ã¿ããããããã©ã°ã€ã³ãäœæããŸãã WordPressã䜿çšããŠããå Žåã RICG Responsive Imagesãã©ã°ã€ã³ã䜿çšã§ããŸãã ã€ã³ã¹ããŒã«åŸãã¢ã¯ãã£ããŒã·ã§ã³ã®ããã«functions.phpãã¡ã€ã«ã«ä»¥äžãè¿œå ããå¿ èŠããããŸãã
function custom_theme_setup() { add_theme_support( 'advanced-image-compression' ); } add_action( 'after_setup_theme', 'custom_theme_setup' );
ä»ã®CMSã¯ãäœããã®æ¹æ³ã§ç»åæ©èœã«ã¢ã¯ã»ã¹ã§ããŸã-ããã¥ã¡ã³ããåç §ããŠãã ããã
æ§èœ
ç§ã®ãã¹ãã§ã¯ãããã©ã«ãã§-resizeã«æ¯ã¹ãŠãIMã¯ç»åã®åŠçã«2.25åã®æéããããããšãããããŸããã
ãããã«
ãã¶ã€ããŒãšéçºè ã¯ããŠã§ãã®ä»çµã¿ã«éåžžã«åœ±é¿ãäžããŸãã ç§ãã¡ã¯ãŠã§ããµã€ããããéããããŠãŒã¶ãŒã®èªèãæ¹åããããã«ã³ã³ãã³ããæ°ããåžå Žã«ããããããšãã§ããŸã ã ç»åã®ããªã¥ãŒã ã®ã«ããã¯éåžžã«ç°¡åã«è¡ããããµã€ãã®ããã©ãŒãã³ã¹ã®åäžã«å€§ãã圱é¿ããŸããããããã¹ãŠã®æ å ±ãããªãã«ãšã£ãŠæçšã§ããããŠãŒã¶ãŒã®ãµã€ããæ¹åã§ããããšãé¡ã£ãŠããŸãã
åç §è³æ
ããã声
php-respimg
RICG Responsive Imagesãã©ã°ã€ã³