ã¯ããã«
ããã«ã¡ã¯ã2024/3/11ã2024/3/29ã®3é±éãã¢ã«ããã²ã¼ã ã¹ã®ã¤ã³ã¿ã¼ã³ã«åå ããã¦ããã ãã¾ãããä»åã¯ã¤ã³ã¿ã¼ã³ã§åãçµãã äºã»å¦ãã ãã¨ãç´¹ä»ããã¦ããã ãã¾ãï¼
èªå·±ç´¹ä»
æ±äº¬çç§å¤§å¦ä¿®å£«2å¹´ã®äºåºã¨ç³ãã¾ããç§ã¯å¤§å¦å ¥å¦æããããã°ã©ãã³ã°ããå§ããç¾å¨ã§ã¯C++ã使ã£ãã½ããã¦ã§ã¢éçºã®ã¢ã«ãã¤ãã»pythonã使ã£ãç»åå¦çåéã®ç 究ã»Goè¨èªã使ã£ã趣å³ã§ã®å人éçºãè¡ã£ã¦ãã¾ãã
ã¢ã«ããã²ã¼ã ã¹ã®ã¤ã³ã¿ã¼ã³ãå¿æããåæ©
ç§ãã¤ã³ã¿ã¼ã³ãå¿æããçç±ã¨ãã¦ãã²ã¼ã æ¥çã§ã®ãµã¼ãã¼ãµã¤ãã¨ã³ã¸ãã¢ãã©ããã£ãæ¥åããã¦ããã®ããèã§å®æãããã£ãã¨ããäºãæãããã¾ããç§ãæã£ã¦ããã¢ããã¼ã¨ãã¦ããè¯ããããã¯ãã¯æ¥½ããéçºã§ããªããä½ããªããã¨èãã¦ãã¾ãããã®ä¸ã§ã²ã¼ã éçºã¯æ¥½ããéçºããã¨ããã¹ã¿ã³ã¹ãå¼·ãã®ã§ã¯ãªããã¨æããã¢ã«ããã²ã¼ã ã¹ã®ã¤ã³ã¿ã¼ã³ã«å¿åãã¾ããï¼
åãçµãã å 容
ç§ãä»åã®ã¤ã³ã¿ã¼ã³ã§åãçµãã ã¿ã¹ã¯ã¯åè¨ã§3ã¤ã§ããããã®ä¸ã®1ã¤ãããã¯ã¢ãããã¦ç´¹ä»ãããã¨æãã¾ãã
Pngyu代æ¿ãã¼ã«ã®ä½æ
ã¢ã«ããã²ã¼ã ã¹ã§ã¯ãPngyuã¨ããGUIãã¼ã«ã使ã£ã¦ãã¾ãã
Pngyuã¨ã¯ï¼
Pngyuã¯ãè¤æ°ã®PNGç»åãã¡ã¤ã«ãä¸æ¬ã§å§ç¸®ãããã¨ãã§ããã¦ã¼ã¶ã¼ãã¬ã³ããªã¼ãªãã¼ã«ã§ãããã¦ã¹æä½ã ãã§ç°¡åã«ç»åãå§ç¸®ã§ããããããã¶ã¤ãã¼ãã²ã¼ã éçºè ããã®æ¯æãåãã¦ãã¾ãã
ç»åå§ç¸®ã®å¿ è¦æ§
ã²ã¼ã éçºã§ã¯ãå¤æ°ã®ç»åã使ç¨ããã¾ããã¿ã¤ãã«ç»é¢ãã¬ãã£ã®ãç¥ããããã¼ããããã¢ããéç¥ãªã©ããããã®ç»åã¯ã²ã¼ã ã®é åãä¼ããéè¦ãªå½¹å²ãæ ã£ã¦ãã¾ããããããç»åãã¡ã¤ã«ã¯ããã¹ããã¡ã¤ã«ã¨æ¯ã¹ã¦ãã¼ã¿ãµã¤ãºã大ããããã®ã¾ã¾ä½¿ç¨ããã¨ã²ã¼ã ã®èªã¿è¾¼ã¿é度ãé ãããããããã©ã¼ãã³ã¹ã«å½±é¿ãä¸ããå¯è½æ§ãããã¾ããããã§ç»åã®å§ç¸®ãéè¦ã¨ãªãã¾ãããä¸æä¸ææåã§å¦çããã«ã¯æéããããã¾ããããããèæ¯ãããPngyuã®ãããªä¸æ¬å§ç¸®ãã¼ã«ãç¾å ´ã§é »ç¹ã«å©ç¨ããã¦ãã¾ããã
ç»åå§ç¸®ã®çè«
ç»åå§ç¸®ã¯ãã¸ã¿ã«ç»åãã¡ã¤ã«ã®ãã¼ã¿å®¹éãåæ¸ããããã«ç¨ããããæè¡ã§ããããã§ã¯ããã®åçã«ã¤ãã¦è§£èª¬ãã¾ãã
ä¾ã¨ãã¦ã24ãããã®ãã«ã«ã©ã¼ç»åãèãã¦ã¿ã¾ãããããã®å½¢å¼ã§ã¯ãåãã¯ã»ã«ã¯RGBåè²ã8ãããã§è¡¨ç¾ããåè¨ã§3ãã¤ãã®ãã¼ã¿ã使ç¨ãã¾ããããã«ãããç´1677ä¸è²ï¼æ£ç¢ºã«ã¯16,777,216è²ï¼ãåç¾ã§ãã¾ãã ã¤ã¡ã¼ã¸ã¨ãã¦ã¯ä»¥ä¸ã®ãããªå½¢ã§ãã
ãã«ã«ã©ã¼ç»åã®ãã¼ã¿å®¹éãåæ¸ããæ¹æ³ã®ä¸ã¤ã«ãã¤ã³ããã¯ã¹ã«ã©ã¼ã¸ã®å¤æãããã¾ãããã®æ¹æ³ã§ã¯ã使ç¨ããè²ã®æ°ã256è²ï¼1ãã¤ãï¼ã«éå®ããåãã¯ã»ã«ã«è²ã®ã¤ã³ããã¯ã¹ãå²ãå½ã¦ããã¨ã§ãã¼ã¿éãæ¸å°ããã¾ããåãã¯ã»ã«æ å ±ã¨ã¯å¥ã«ããã«ã©ã¼ãã¬ãããã¨ãã°ãããã¼ã¿ããããè²ã®ã¤ã³ããã¯ã¹ãã¨ã«RGBåè²ã®æ å ±éãä¿æãã¾ããã¤ã¡ã¼ã¸ã¨ãã¦ã¯ã以ä¸ã®ãããªå½¢ã§ãã
ãã®ããã«ãããã¨ã§ãç»åå ¨ä½ã§1/3ã®ãã¼ã¿å®¹éã«åããäºãåºæ¥ã¾ããPngyuã§ã¯ãããå é¨çã«è¡ã£ã¦ãã¾ãã
åé¡çºç
ãããã使ç¨ãã¦ããPngyuãçªç¶åä½ããªããªãã¾ãããå ¬å¼ã®ãªãªã¼ã¹ãã¼ãã調ã¹ãã¨ãæå¾ã®æ´æ°ã¯2013å¹´11æ4æ¥ã§ããã10年以ä¸ã®æ³æãçµéãã¦ãã¾ããæè¡ã®é²æ©ã¨å ±ã«ãå¤ãã½ããã¦ã§ã¢ãäºææ§ã®åé¡ã§åããªããªãã®ã¯çããããã¾ããã
ããã§
ç»åã®å§ç¸®ã¯ä»å¾ãè¡ãå¿ è¦ããããããPngyuã®ä»£æ¿ã¨ãªããã¼ã«ãä½æããäºã«ãªãã¾ãããPngyuã§ã¯å§ç¸®ã¨ã³ã¸ã³ã«pngquantã¨ããã©ã¤ãã©ãªã使ç¨ãã¦ãããmacã®ã¿ã¼ããã«ã§ã使ããå§ç¸®ãã¼ã«ã§ãããã¾ãã幸ãã«ãã¢ã«ããã²ã¼ã ã¹ã§ã¯ãä¼ç¤¾ã§è²¸åºãããPCã¯macã§ãã£ãããããpngquantã使ã£ã¦è¤æ°ç»åãä¸åº¦ã«å§ç¸®ããã·ã§ã«ã¹ã¯ãªããããä½æããã°ããããããããä½æãã¾ããã
pngquantã®ã³ãã³ã詳細
ã§ã¯ãå®éã«ã©ã®ããã«ã³ãã³ããå®è¡ãã¹ããªã®ã解説ãã¾ãã
pngquant 256 sample.png
ä¸è¨ã®ããã«å®è¡ããã¨ãsample-fs8.png
ãä½æããã¾ãã
ããã ãã®è§£èª¬ã§ã¯å¯ããã®ã§ãpngquantã®ãªãã·ã§ã³ã«ã¤ãã¦ãä¸é¨è§£èª¬ãã¾ãã
--outputãªãã·ã§ã³
--output <filename>
ã¨ãããã¨ã§ãåºåå
ã®ãã¡ã¤ã«åãæå®ã§ãã¾ãã
--qualityãªãã·ã§ã³
åæç¥èã¨ãã¦ãpngquantã¯ç»åãå§ç¸®ããéã«ãè¨å®ããããæ大å質ããæºããããã«å¿ è¦ãªæå°ã®è²æ°ã使ç¨ãã¾ãããã®ã¨ããç»åã®å質ããæå°å質ããä¸åã£ã¦ãã¾ãå ´åããã®ç»åã¯ä¿åãããã代ããã«å ã®24ãããã«ã©ã¼ã®ç»åãåºåããã¾ããããã§è¨ããå質ãã¨ã¯ããç»åãå§ç¸®ããéã«ã©ãã ãã®è²æ å ±ãä¿æããå ã®ç»åã«ã©ãã ãè¿ãè¦ãç®ãç¶æã§ããããã¨ããå²åã§ãã
ä»åã®å ´åããå質ã«é¢ä¿ãªããç»åãå§ç¸®ãããï¼ãããã®æ·±ãã8ãããã«ãªãï¼ããã¨ãæåªå
ã§ãã£ãããã<min>
ã0, <max>
ã100ã§æå®ãã¾ããã
--speedãªãã·ã§ã³
ç°¡åã«è¨ãã¨ãå®è¡é度ãæ©ããããé
ãããããããªãã·ã§ã³ã§ããå®è¡é度ãéãã»ã©å§ç¸®å¾ã®ç»åãèããªããéã«é
ãã»ã©å質ãåä¸ãã¾ããä»åãå®è¡é度ã¯ããã¾ã§æ°ã«ããå¿
è¦ããªãããè¤æ°ã®ç»åãä¸åº¦ã«å§ç¸®ã§ããã°è¯ããããã--speed 1
ã¨ãã¾ããã
å®éã«ä½æããã·ã§ã«ã¹ã¯ãªãã
以ä¸ãå®éã«ä½æããã·ã§ã«ã¹ã¯ãªããã§ãã
#!/bin/sh -e IMGS_PATH="./input/*.png" OUT_DIR="/output" cd "$(dirname "$0")" # outputãã©ã«ããä½æããã¦ããªããã°ä½æãã if [ ! -e $OUT_DIR ]; then mkdir $OUT_DIR fi # input ãã©ã«ãå ã®ç»åãå§ç¸® for img in `find $IMGS_PATH` do #ãã¡ã¤ã«åã®ã¿ãåå¾ BASE_NAME= `basename $img` # åºåå ã®ãã¹ãæå® OUT_IMG_PATH="$OUT_DIR/$BASE_NAME" echo "$BASE_NAME ãå§ç¸®ä¸.." if [ -e $OUT_IMG_PATH 1]; then rm -f $OUT_IMG_PATH fi pngquant --output $OUT_IMG_PATH:--quality 0-100 --speed 1 256 $img echo "$OUT_IMG_PATH ã«å§ç¸®ããç»åãä¿åãã¾ãã\n" done
ã¤ã³ã¿ã¼ã³ãéãã¦å¦ãã ãã¨
質åãããã¨ã®å¤§åã
ã¤ã³ã¿ã¼ã³ãå§ããåã¯ãäºç´°ãªãã¨ã§ãåãããªãäºã質åããããã®ãæ¥ããããã¨æã£ã¦ãã¾ãããããããç¾å ´ç¬èªã®ã³ã¼ãã®æ¸ãæ¹ã§ãã£ããã社å å°ç¨ã®ãããã°ã·ã¹ãã ã®ä½¿ãæ¹ãããããã質åããªããåãããªãäºãã¨ã¦ãå¤ãã£ãã§ããã¿ã¹ã¯ãããªãã¦ããä¸ã§ãåãããªãäºããã®ã¾ã¾ã«ãã¦ãããäºã®æ¹ããã£ã½ã©è¯ããªãäºã«æ°ã¥ãã¾ããã
ã³ã¼ãã«å¯¾ãã責任æ
ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ã責任æã®ããä»äºãã£ã¦ãªãã ããï¼ã¨ä»¥åãããã£ã¨æã£ã¦ãã¾ãããããã®çããåºãæ°ããã¦ãã¾ããã¤ã³ã¿ã¼ã³ã®ã¿ã¹ã¯ä¸ã«ãèªåã®æ¸ããã³ã¼ãã»æ¸ãç´ããã¨æã£ã¦ããã³ã¼ããããããã®ã¡ãªããã»ãã¡ãªãããã¾ã¨ãã説æããæ©ä¼ãããã¾ããã ä»ã¾ã§ãããããæ¹ãè¯ãã®ã§ã¯ãªããï¼ãã¨ããæè¦çã«ããã³ã¼ããæ¸ãã¦ããªãã£ããããèªåã®ä¸ã ãã§å®çµãã¦ãã¾ãããããããä»åã¡ãªãããã¡ãªãããã¾ã¨ãã説æããä¸ã§ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ã責任æã®ããä»äºãã¨ã¯ãèªåã®æ¸ããã³ã¼ã1ã¤1ã¤ã«å¯¾ãããªããã®æ¸ãæ¹ã«ããã®ãããã©ãããæå³ãæã£ã¦æ¸ããã®ãããä»äººã«èª¬æã§ããäºã§ããã¨æãã¾ããã
ã³ã¼ãã¬ãã¥ã¼ã®å¤§åã
èªåã®å®è£ ããæ©è½ãã³ã¼ãã¬ãã¥ã¼ãã¦ãããæ©ä¼ãä½åº¦ããã¦ããã ãã¾ããããã®ä¸ã§Elixirã®ã³ã¼ãã®æ¸ãæ¹ããã¹ãã³ã¼ãã®æ¸ãæ¹ã§ãã£ãããï¼ããã¯æ¥ããããã§ããï¼èªåã§æ°ä»ããªãã£ããããªã¹ãã«ãã¹ãã¬ãã¥ã¼ãã¦ãããã¾ãããã³ã¼ãã¬ãã¥ã¼ãããäºã§ããã³ã¼ãã®ä¿å®æ§ãåä¸ããã¨å®æãã¾ããã
æãããã¨ã»ææ³
楽ããã£ãï¼
æ¬å½ã«ããã«å°½ããã¨æãã¾ããéçºãé²ããä¸ã§èªåããã¹ã¿ãã¼ã¿ãAPIã®è¨è¨ãè¡ãã¿ã¹ã¯ãããããµã¼ãã¼ã¨ã³ã¸ãã¢ã®æ¹ä»¥å¤ã«ãããã©ã³ãã¼ãããã¯ã©ã¤ã¢ã³ãããã¨è©±ãåãæ©ä¼ãããã¾ãããã話ããäººå ¨å¡ãã²ã¼ã ããããããã¦ãããï¼ãã¨ããé°å²æ°ãæãããã¾ãããã¾ãããããªæ¹ãã¡ã¨ä¸ç·ã«éçºãã§ãã¦ããã¨å®æã§ããã¨ã¦ã楽ããæãããã¾ããï¼
ã¤ãã¤ãã¨ã³ã¸ãã¢ãããããï¼
ä»åã®ã¤ã³ã¿ã¼ã³ã§ã¯ããµã¼ãã¼ã¨ã³ã¸ãã¢ã®æ¥åã«æ½ã£ã¦ã¿ã¹ã¯ããã¦ãã¾ãããèªèº«ã®ã¿ã¹ã¯ãããªãã¤ã¤ãã¼ã ã¡ã³ãã¼ã¨1on1é¢è«ã沢山ãã£ã¦ãã人ããã¬ãã¥ã¼ãä¾é ¼ããã¨1,2æéå¾ã«ã¯å®ç§ã«ã³ã¼ãã¬ãã¥ã¼ãã¾ã¨ãã¦ããã人ã1人ã§å¤ãã®ã¿ã¹ã¯ãæ±ããªããã¦ãã±ãæãã¦ãã人ãªã©å°æ¬ã§ãã人ãå¤ããã¨ã¦ãåºæ¿ã®ããã¤ã³ã¿ã¼ã³ã§ããï¼
æå¾ã«
åæ¥ã¯ãããåããã®ããã¨ããä¸å®ããããç·å¼µãã¦ãã¾ããããã¿ã¹ã¯ãããªãã¦ããä¸ã§å°ããã¤èªä¿¡ãä»ãã3é±éããã£ã¨ããéã«çµã£ã¦ãã¾ããã3é±éãéãã¦ã楽ããã ããããªããèªåãä»ã¾ã§ç¥ããªãã£ãç¥èãèªåã®å¼±ç¹ãç¥ãããå¦ã³ã®å¤ãã¤ã³ã¿ã¼ã³ã ã£ãã¨æãã¦ãã¾ããã¡ã³ã¿ã¼ã®æ¹ãã¤ã³ã¿ã¼ã³ã·ããã«åå ããæ©ä¼ãæä¾ãã¦ãã ãã£ã人äºã®æ¹ãªã©ããã¹ã¦ã®æ¹ã«æè¬ãã¦ãã¾ãã3é±éãããã¨ããããã¾ããï¼