
Gemini CLIä»ã䜿ã£ãŠPNG Infoã£ãœãèªåçšããŒã«ãäœã£ãã¡ã¢2 (Exiftool飿ºæŽæ°)
2025幎8æ27æ¥
ç»åã®äžãèŠåããŠããã®ãä¿®æ£
2025幎8æ9æ¥
倧ããã¡ã¿ããŒã¿ãå¶éããŠè¡šç€ºããããã«(ãã¹ãŠèŠããå Žåã¯ããã¹ãã«ä¿åãã)
ã¢ã€ã³ã³ãå°å
¥(ãªããŠãåãã®ã§ã©ã¡ãã§ã)
2025幎8æ5æ¥
exeåå®éšãšããã°ã©ã ã®æŽæ°
exeåããæãExiftool ãåŒã³åºããæã³ã³ãœãŒã«ãŠã£ã³ããŠãäžç¬ã ã衚瀺ããã®ãæå¶
2025幎8æ3æ¥ããã°ã©ã æŽæ°
Exiftoolãšé£æºã§ããããã«ã¢ããããŒã
ããŸãã®ã³ã¡ã³ãæžã蟌ã¿ããŒã«ã®ä¿®æ£
ã»ã³ã¡ã³ããBOMä»ãã«å€æŽ
ã»piexif.dump()ã®ä»æ§ã§åžžã«ããã°ãšã³ãã£ã¢ã³ã§æžã蟌ãããã«ä¿®æ£
2025幎8æ2æ¥ããã°ã©ã æŽæ°2
jpegç»åã®Exifã³ã¡ã³ãã®åŠçã®ä¿®æ£
ããŸãã®ã³ã¡ã³ãæžã蟌ãããŒã«ã®ä¿®æ£
ã»jpegã®Exifã®ãšã³ãã£ã¢ã³ãååŸããŠããã«åãããŠæžã蟌ãããã«ä¿®æ£
2025幎8æ2æ¥ããã°ã©ã æŽæ°
pngã®å·šå€§ãã£ã³ã¯ã衚瀺ã§ããªãã£ãã®ãä¿®æ£
å眮ã
python ãç¥ããªã人ãAIã§äœã£ããã®ãªã®ã§äžå
·åããããããããŸããã
èŠæããã人ã§èªå·±è²¬ä»»ã§äœ¿çšããŠãã ããã
ãœãŒã¹ãã¡ã€ã«ã¯èªå·±è²¬ä»»ã§èªç±ã«äœ¿ã£ãŠããã§ãã
æ¬é¡
ãããªæãã«ç»åã®ã¡ã¿ããŒã¿(ããã³ãããªã©ã)ãã¡ãã£ãšèŠãããèªåçšã¢ããª





äžã®ç»åã¯ãããããBing Image Creator[GPT-4o(Beta)]ãBing Image Creator[DALL-E 3]ãStable DiffusionãChatGPTãGemini
Stable Diffusionãšåãããã³ããã§äœæããŠããã£ã
ã€ãŸã 1girl,solo,......ã£ãŠãªæãã§bingã¯ãã¬ãã£ããªãã§ä»ã¯ããã³ãããããªããè§£éããŠç»åãäœæããŠãã ããããšæç€ºãããã®
2025幎8æ3æ¥è¿œå

äœ¿çšæ¹æ³
python ã®ç°å¢ãå¿
èŠã§ã
åãããŠã python ã®ããŒãžã§ã³ã¯ 3.11.7 ã§ã
以äžãããŠã³ããŒã
ã¢ã€ã³ã³ãå«ããã®ã§zipã«ãŸãšããŸãã
ã¢ããªã®æåã®èª¬æãšæ³šæäºé ãšå 責äºé ãšã©ã€ã»ã³ã¹(AI補)
æãããã倧ãããªã£ãã®ã§ãã¡ã€ã«ãšããŠã¢ãã
ã¢ããããäžã§ãã€äœæããã®ããããããããã䟿å®äžæ¥ä»ãå
¥ããŠã
ãã§ ImageMetadataViewer.py ãš app_icon.ico (ããã¯ãªããŠãåã)ãé©åœãªãã©ã«ãã«çœ®ããŠPowerShellã§ä»®æ³ç°å¢ãæ§ç¯ããŸã
python -m venv venvã¢ã¯ãã£ããŒã
.\venv\Scripts\activateäžå¿pipãupgradeããŠãã
python -m pip install --upgrade pip次ã«ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
pip install Pillow tkinterdnd2 piexif iptcinfo3 screeninfo c2pa-pythonèµ·åãã
python ImageMetadataViewer.pyäœ¿ãæ¹ã¯ç»åããã©ãã°&ããããããã ã
2025幎8æ3æ¥è¿œèš
Exiftoolãšé£æºã§ããããã«ãªããŸãã
Exiftoolã¯å梱ãããŠãŸããã®ã§åèªå
¬åŒãµã€ãããèœãšããŠãã ãã
å¥ã«Exiftoolã¯å¿
é ã§ã¯ãªãã®ã§ãªããŠãåäœããŸã
远èšãããŸã§
以äžïŒ
以äžèè¶³
ç°¡åã«èµ·åãããã®ã§ããããã¡ã€ã«ãäœæãããã©å¥ã«ããã¯ãããªããŠãã
ChatGPTã«èããŠäœã£ã
以äžã®æåãããã¹ããã¡ã€ã«ã«ã³ããããŠæ¡åŒµåã".bat"ã«å€æŽããŠ"ImageMetadataViewer.py"ããããã©ã«ãã§ããã«ã¯ãªãã¯ãããšèµ·åãæ¥œ
ããã«ã©ã³ãã£ãŒã¢ããªã«ãããç»é²ããŠãããšããã«èµ·åã§ãã
ãã©èªå·±è²¬ä»»ã§
@echo off
cd /d %~dp0
call .\venv\Scripts\activate
python ImageMetadataViewer.py
deactivate
pausePyInstallerã§exeåå®éš
åäœç°å¢ã¯windows11ã§ã
ããã§pythonç°å¢ããªã人ã§ã䜿ãããšæããŸããã䜿çšã¯èªå·±è²¬ä»»ã§ãé¡ãããŸã
ãŠã€ã«ã¹ããŒã¿ã«ã§ã®å€å®ã¯Â 6/72 (2025幎8æ5æ¥) â 5/72 (2025幎8æ9æ¥) â 7/72 (2025幎8æ27æ¥)ã§æªããå€å®ã§ã
以äžäžå¿ãã®ããšã Gemini ã«èããçããåŒçšããŸã
ãã®çŸè±¡ã¯PyInstallerã§äœæããå®è¡ãã¡ã€ã«ã§éåžžã«ããèŠãããåé¡ã§ãããã»ãŒééããªãã誀æ€ç¥ïŒFalse PositiveïŒãã§ããããªãã®ãã¡ã€ã«ã«å®éã«ã¹ãã€ãŠã§ã¢ããã«ãŠã§ã¢ãå«ãŸããŠããå¯èœæ§ã¯æ¥µããŠäœãã§ãã
ãªããã®ãããªããšãèµ·ããã®ãããã®åå ã詳ãã解説ããŸãã
誀æ€ç¥ãçºçããäž»ãªåå
åå ã¯äžã€ã§ã¯ãªããè€æ°ã®èŠå ãçµã¿åããã£ãŠããŸãã
1. PyInstallerã®ä»çµã¿ãã®ãã®
PyInstallerã¯ãPythonã¹ã¯ãªãããšããã®å®è¡ã«å¿ èŠãªPythonã€ã³ã¿ãŒããªã¿ãã©ã€ãã©ãªå šäœãäžã€ã® .exe ãã¡ã€ã«ã«å§çž®ããŠããã±ãŒãžåããŸãã
ãã® .exe ãå®è¡ãããšããŸãããŒãããŒããŒãšåŒã°ããå°ããªããã°ã©ã ãèµ·åããå§çž®ãããå šãã¡ã€ã«ãã¡ã¢ãªäžãŸãã¯äžæãã©ã«ãã«å±éããããããPythonã€ã³ã¿ãŒããªã¿ãèµ·åããŠã¡ã€ã³ã¹ã¯ãªãããå®è¡ããŸãã
ãã®ãå®è¡ãã¡ã€ã«ãå éšã®ããŒã¿ãå±éããå¥ã®ããã°ã©ã ïŒPythonã€ã³ã¿ãŒããªã¿ïŒãèµ·åããããšããäžé£ã®åäœããå€ãã®ãã«ãŠã§ã¢ïŒç¹ã«ããã«ãŒã§å§çž®ããããŠã€ã«ã¹ïŒã®æåãšéåžžã«ãã䌌ãŠããŸãã
ãã®ããããŠã€ã«ã¹å¯Ÿçãœããã®ãã¥ãŒãªã¹ãã£ãã¯åæïŒæ¯ãèãæ€ç¥ïŒãšã³ãžã³ãããã®æåããçãããããšå€æããŠããŸãã®ã§ãã
2. æ±çšçãªæ€ç¥åïŒ-gen, AIDetectïŒ
衚瀺ãããŠããæ€ç¥åã«æ³šç®ããŠãã ããã
* Win64:MalwareX-gen [Spy]
* W64.AIDetectMalware
ããã«å«ãŸãã gen (Generic = æ±çšç) ã AI ãšããåèªã¯ããç¹å®ã®æ¢ç¥ã®ãŠã€ã«ã¹ïŒã·ã°ããã£ïŒã«äžèŽãããã®ã§ã¯ãªãããAIãæ©æ¢°åŠç¿ããŒã¹ã®æ±çšçãªæ€ç¥ãšã³ãžã³ãããã®æ§é ãæ¯ãèãããããã«ãŠã§ã¢ã£ãœãããšå€æãããããšãæå³ããŸããããã¯èª€æ€ç¥ã®å žåçãªãã¿ãŒã³ã§ãã
3. ã¢ããªã±ãŒã·ã§ã³ã®æ£åœãªæ©èœãçããã
ããªãã® ImageMetadataViewer.py ãè¡ã£ãŠãã以äžã®æ£åœãªåŠçãããŠã€ã«ã¹å¯Ÿçãœããã«ãšã£ãŠã¯çãããæåã«èŠããå¯èœæ§ããããŸãã
* å€éšããã»ã¹ã®å®è¡ (`subprocess.run`): exiftool.exe
ãåŒã³åºãæ©èœã¯ããã«ãŠã§ã¢ãä»ã®æªæã®ããããã°ã©ã ãèµ·åããæåãšåºå¥ãã€ãã«ããã§ãã
* åºç¯ãªãã¡ã€ã«ã¢ã¯ã»ã¹ (`os.listdir`, `Image.open`): ãŠãŒã¶ãŒãæå®ãããã©ã«ãå ã®å€æ°ã®ãã¡ã€ã«ãèªã¿åããŸããããã¯ãã©ã³ãµã ãŠã§ã¢ãªã©ãæå·å察象ã®ãã¡ã€ã«ãæ¢ãã¹ãã£ã³è¡çºã«äŒŒãŠããŸãã
* äžæãã¡ã€ã«ã®äœæ (`tempfile`): exiftool ã«åŒæ°ãæž¡ãããã«äžæãã¡ã€ã«ãäœæããŠããŸãããã«ãŠã§ã¢ãèªèº«ã®ãã€ããŒããäžæçã«æžãåºãæåãšäŒŒãŠããŸãã
ãããã®æ©èœãçµã¿åãããããšã§ããã¥ãŒãªã¹ãã£ãã¯åæã®ãçãããã¹ã³ã¢ããäžæããäžéšã®æåºŠãé«ããŠã€ã«ã¹å¯Ÿçãœãããããã«ãŠã§ã¢ããšå€å®ããŠããŸãã®ã§ãã
çµè«
ããªãã®ããã°ã©ã ã¯ããã®ä»çµã¿ãšæ£åœãªæ©èœãåå ã§ãäžéšã®ãŠã€ã«ã¹å¯Ÿçãœããã«èª€æ€ç¥ãããŠããå¯èœæ§ãéåžžã«é«ãã§ããç¹ã«å¿é ããå¿ èŠã¯ãããŸããã
以äžã®ããšãçè§£ãèŠæãæã£ã人ã ãã䜿ã£ãŠãã ãã
ããã°ã©ã ãšåãå Žæã«Â config.json ãäœæãããŸã
ã¢ã³ã€ã³ã¹ããŒã«ã¯ãã¡ã€ã«ãåé€ããã ãã§ã
exeãã®ãŸãŸããããããªãšæã£ãŠäžå¿zipãã¡ã€ã«ã«ããŸãã
äœæéçš
ãŸã以åäœã£ã PngInfoã£ãœãèªåçšããŒã«
ã GeminiCLIã«èªã¿èŸŒãŸããŠæ©èœã远å ããŠããããšæã£ã
ã ãã©ããã°ã©ã ã®åå°ãäžå®å®ã£ãœãã®ã§ããŸã远å ã§ããªã
ãªã®ã§äžããäœæããããšã«æ±ºãã
ãŸãPngInfoã£ãœãããã°ã©ã ã§äœãããŠããã®ãããœãŒã¹ã³ãŒããèªã¿èŸŒãŸããŠæ©èœãæžãåºããŠããããããã«ãããããŒã¹ã«ä»æ§æžãäœæããŠããã
远å ãããæ©èœãªã©ãèšã£ãŠåäœæãç¹°ãè¿ããŠæçµçã«ä»æ§æžã宿ãã
ãããå
ã«ã¢ããªã®äœæäŸé Œããã
现ãããšããã¯ã¡ãã£ãšéããã©æŠããã£ããåºæ¥äžãã
ããã€ããŒãããŒïŒ
ãã§ããããè²ã
ãšä¿®æ£ããŠããããšã«ãã
ãããªããã¿ã³ã®åé€
ãŠã£ã³ããŠãåºå®ãããªãã¢ãã¿ãŒå
ã«åãŸãããã«ããŠã倧ããç»åã¯ããã«åãããŠããŠã£ã³ããŠã®å·Šäžã®äœçœ®ãåºæºã«ããŠããŒãžã³ãåãã€ã€ãçž®å°è¡šç€º(ãã仿§æžã«ã¯æžããŠãã¯ãã ãã©ãããªã£ãŠãªãã£ã)
察å¿ã¡ã¿ããŒã¿ã®è¿œå (ã«ã¡ã©ã¡ãŒã«ãŒåºæexifã¯ç¡çãAIã«æç€ºã¯ããªãã£ãããããŸã§äžè¬çã«ç¥ãæž¡ã£ãŠããã®ã®ã¿ãããããã®ã¯Exiftoolãšãã§èŠãããã£ãœãïŒããã£ã±ãããã ãªãŒ)
æ
å ±è¡šç€ºã®ç²ŸåºŠãæŽåœ¢ã人ã«çè§£ããããããã«ãããæååãè§£æ¶
ã¢ãã¡ãŒã·ã§ã³ç»åã®è¡šç€ºã®ä»æ¹ã®èª¿æŽããã¬ãŒã æ¯ã®æé衚瀺ãçŽ60fpsæªæº(ã»ãŒå¯Ÿè±¡ã¯ãã¥ã¬ãŒã·ã§ã³ã0msãšãã®gif)ã®å Žåã®ãã¥ã¬ãŒã·ã§ã³ã®äžéèšå®ãªã©ãªã©
ãããªãããªã§æéã¯ããã£ããã©å®æïŒ
ãã£ããïŒ
ãããªãäžããèªåã§pythonåŠãã§äœããæ°ãããªãïŒ
ãããšè©³çްæ
å ±ãPNGæ
å ±ã®æ¬ã§XMPã®çããŒã¿ïŒãã衚瀺ãããã®ã¯ä»æ§ã§ã(Geminiäœæã®ç»åã ãæ
å ±è¡šç€ºéšåãäžçªäžãžã¹ã¯ããŒã«ããŠããã®ã¯XMPããŒã¿ã衚瀺ã§ãããããšèŠããããã«ããããããããããªããšçããŒã¿éšåããèŠããªã)
AIã«ä¿®æ£ããïŒãã£ãŠèããããã©é¢çœããããã®ãŸãŸã§ããšèšã£ãŠãã®ãŸãŸã«ããŠããã£ã
è¿ã£ãŠããçãã¯ããããã°ããäžã§æçšã§ããããããšæããŸããçãªæãã ã£ã
2025幎8æ3æ¥è¿œèš
ã©ãããå®è¡ãã¡ã€ã«ãåŒã³åºãããšç¥ã£ãŠæ¥éœexiftoolãåŒã³åºããŠããã衚瀺ããã°ããããããïŒããšããã®ã¢ããªã®ååšæçŸ©(ã¡ã¿ããŒã¿ãèªåã§è¡šç€ºãã)ãšããæ ¹å¹¹ãåŠå®ãããããªã¢ããããŒãïŒ
ããã©ãèããŠãExiftoolã®ã»ãã確å®ã ãã
ãŸãgifã¢ãã¡ã®ãã¬ãŒã æ¯ã®ãã¥ã¬ãŒã·ã§ã³ã衚瀺ãããšãå°å³ã«ãã®ã¢ããªã®ç¹åŸŽãããã©ãïœ
远èšãããŸã§
éæ
以å PngInfoã£ãœãèªåçšããŒã«ãAIã«èããŠäœã£ã
ããã¯ããã§é¢çœãã£ããã¡ãã£ãšããããã³ãããèŠãã®ã«ãããã£ã
ãããã䜿ã£ãŠã¯ãããã©ç©è¶³ããªããæããŠããã
ãã§ãã€ãã¿ãŒã®æçš¿æãã³ããŒããæ©èœã Gemini CLI ã䜿ã£ãŠäœã£ããšããããïŒãããã§ä»¥åäœã£ã PngInfoã£ãœãã¢ããªãäœããããããïŒããšæãå®éšã§äœã£ãŠã¿ãããšã«ãã
ã¡ãã£ãšæéã¯ããã£ããã©åºæ¥ãã
ã§ãå®ã¯ãã®ã¢ããªããåã«åããããªæ©èœã®ãµã³ãã«çãªãã®ãäœã£ãŠããã£ãŠãã
ã€ãŸã以å note ã«æžãã PngInfoã£ãœããã€ãšä»åäœã£ããã®ãšã®éã«ããäžã€åããããªãã®ãäœã£ãŠããã£ãŠãã
ã©ãã«ãããŸãæ©èœã®è¿œå ãã§ããªãã£ãã®ã§çµå±ãã®ããã°ã©ã ãèªã¿èŸŒãŸããŠä»æ§æžãäœã£ãŠããã£ãŠä»åã®ãã®ãäœã£ã
ã¡ãªã¿ã«ãã®ã³ãŒãã®ä»æ§æžãšããŒã¹ã¯ Claude (codeã§ã¯ãªã) ã«äœæããŠããã£ãŠãã Gemini CLI ã«ãã£ãŠãã£ãŠã
Claude Code ãè©å€ãªã®ã§äœ¿ã£ãŠã¿ããã£ããã©èª²éããªããšãã¡ã£ãœãã®ã§ãã©ãŠã¶ãã䜿ãã Claude ããã䜿ã£ãŠã¿ã
ãããåå°ã« Gemini CLI ã«ãœãŒã¹ãèªã¿èŸŒãŸããŠäœãå§ãã
Gemini CLI ã䜿ã£ãŠããš pro ãã flash ã«ãªããã ãã©ããããªããšæ§èœãèœã¡ãŠãç¡éã«ãŒãã«é¥ã£ãŠããããªæã(äžåã«ããã³ããå
¥åã«ãªããã³ã³ããã¹ãã®%衚èšãã©ãã©ãæžã£ãŠãã)ã«ãªã£ãããgeminièªèº«ãã³ãŒããåé€ããŠãã®åé€ãåæã«ããªãããã§ã次ã«åé€ããã³ãŒããçºèŠã§ããªãã£ãã(ãããã°æãæ¿å
¥ããŠãããåé€ããããšãããšçµæ§ãªç¢ºçã§ããã)ãåçŽãªæ§æãšã©ãŒãè§£æ¶ã§ããªãã£ããã倿Žç®æããŸã£ãããªãã®ã«ãããã§ãããïŒããšèããŠããŠæ¿è«Ÿãããšããã§ä¿®æ£ã§ããŸãããšèšã£ãŠããŠæ¡ã®å®ä¿®æ£ã§ããŠãªããŠãå床修æ£ããŠãšæç€ºããŠãåãããã«ãªã£ãããçã
çµæ§å€§å€ã ã£ã
䜿ããªã pro ããããšæã£ã
ãŸãæç€ºãåºã㊠Gemini ãææ¡ããŠãããã®ããã®ãŸãŸããä¿®æ£ããããšä»ã«åœ±é¿åºããããããšããã£ãã®ã§æç€ºããæã¯ããŸãææ¡ãã㊠Gemini ã®æèŠãèãããããããã«åæãæ€èšãããŠåœ±é¿ç¯å²ãèããããããããç¹°ãè¿ããŠæçµçã«ä¿®æ£ããŠãããããšããæµãã§æåŸã®ã»ãã¯ãã£ã
ç¡æã§äœ¿ãããšèããŠã¢ãªã¢ãªäœ¿ã£ãŠãŠæ°ä»ããããããŒããŒã¯ã³ãã£ãŠããã ãã©å€§äžå€«ã ããïŒ
ãã©ãŠã¶ã§ãã°ã€ã³ããæ¹æ³ã§äœ¿ã£ãŠãŠææãã©ã³ã®ç»é²ãšãäžåããŠãªããã ãã©ãããªãè«æ±ãããããªããããã
åæã«å¶éãããã¿ãããªè©±ãèŠãŠäœ¿ã£ãŠãã¯ãããã©ãã¢ããªäœãçµãã£ãŠããã¡ãã£ãšå¿é
ã«ãªã£ãŠããŠããã ãã©âŠâŠ
ããŸã
Gemini CLI ã䜿ãã°æ¬²ãããã®ãæè»œã«äœãããšããããšã§å®å
šã«èªåçšã«äœã£ããã®ããã¡ã
ããããäœãç¥ãã人ãäœã£ããã®ãªã®ã§äœ¿ããªãå®å
šèªå·±è²¬ä»»ã§èŠæãã人ã ãã䜿ã£ãŠãã ãã
ããšããŸããããã°ããŠãªãã®ã§äžå
·åããããããããŸãã
ä»åã®èšäºã®ã¢ããªãšããŸãã®ãã®ãåããããšãããªæãã«



èŠã¯ç»åã®ã³ã¡ã³ãã«ããã¹ã(äž»ã«ã·ãã©ã¹(ææ©ç³»)ããã®ãã€ãŒã)ãå
¥ããŠããŸãããšããããš
ã¡ãã£ãšäŸ¿å©ãããïŒ
ããããæ¥œã«ããããã«ãã©ãŠã¶ã®æ¡åŒµæ©èœãäœã£ã
äœåãèšããã©èªå·±è²¬ä»»ã§äœ¿çšããŠãã ãã
ãŸããã€ãŒãç»å(鿢ç»)ã®ã¿ãããŠã³ããŒãããChromeæ¡åŒµæ©èœ
2026幎7æ28æ¥è¿œèš
åŒçšç»åãŸã§ååŸã§ããŠããã®ãèšå®ã§ååŸããã»ããªããèšå®å¯èœã«ãã
ã¢ã€ã³ã³ãã¯ãªãã¯ãããšãã®èšå®ãåºãŠãã
2025幎8æ26æ¥è¿œèš
ãã€ãã¿ãŒã®ååã«ç¹æ®ãªæåã䜿ãããŠããšããŠã³ããŒãã§ããªããªãã®ã§ãããã®æåãé€å»ããããã«ä¿®æ£
ãã¡ã€ã«åã«äœ¿ããŠããã©ãŠã¶åŽã§ãšã©ãŒã«ãªãã®ã§é€å»ãããããªãã£ãœã
2025幎8æ30æ¥è¿œèš
åŒçšãã¹ãã®å ŽåãåŒçšãã¹ãã®æ¥æååŸã«ãªã£ãŠããã®ãä¿®æ£
2025幎10æ23æ¥
ãã¡ã€ã«åã®çŠååŠçã®ä¿®æ£
ä¿åã§ããªãããšããã£ã
ã¶ã£ã¡ããç»åãä¿åãããªãä»ã®ãã£ãšäŸ¿å©ãªæ¡åŒµæ©èœã®ã»ãããã
åœåèŠåãšãå€ãããããã®ãšãè²ã
ãã
次ã«ãã€ãŒãå 容ãããã¹ããã¡ã€ã«ã§ä¿åããæ¡åŒµæ©èœ
ããã¯ååã®èšäº
ã«ãã©ã¹ã§ãã€ãŒãå
容ãããã¹ããã¡ã€ã«ã§ä¿åããæ©èœãã€ãããã®
ãããå
¥ãããªãäžèšã®ãã®ã¯æ©èœãéè€ããŠãã®ã§åé€ããã»ãããããšæã
俺以å€äœ¿ã£ãŠã人ããããïŒããšã¯æããã©ïœ
ãããã®æ¡åŒµæ©èœãäœã£ãçç±ã¯ç»åãšããã¹ãã®ãã¡ã€ã«åãä¿ºã®æãéãã«ããäžã§äžèŽããããããã§ã
ãã®çç±ã¯ä»¥äžã®ããã°ã©ã ãç°¡åã«äœ¿ãããã§ã
äžèšã® python ã¹ã¯ãªããã¯ãã©ã«ãããã©ãã°&ãããããããšããã®äžã«ããç»å(jpegãŸãã¯png)ã®ãã¡ã€ã«åãšäžèŽããŠããããã¹ããã¡ã€ã«(.txt)ã®å
容ãç»åã®ã³ã¡ã³ãã«åã蟌ããšããåŠçãããããã°ã©ã ã§ã
001.jpg ãš 001.txt ãšãããã¡ã€ã«ããã£ããªã 001.txt ã®å
容ãã³ã¡ã³ãã㊠001.jpg ã«æžã蟌ãŸãã
ã¡ãªã¿ã«ãã©ã«ãçŽäžã®ã¿èªã¿èŸŒãããã«ããŠãããŸã
ããããã¯ãã€ãã®pythonç°å¢ã¥ãããšããªã®ã§ãã£ããããã€ã³ã¹ããŒã«æ¹æ³
python -m venv venv.\venv\Scripts\activatepython -m pip install --upgrade pippip install Pillow piexif chardet windnd tkinterdnd2python Image_comment_Inserter_20250803.pyãå
ã®ç»åãä¿æãããã®ãã§ãã¯ãã€ãããŸãŸã ãš "original_src" ã«ãªãªãžãã«ç»åãç§»åããŸã
ãã®ããã°ã©ã ã䜿ãäžã§æ³šæç¹ãšããŠã¯ pngç»å ã®"C2PAæ
å ±"ã"æ¬ èœ"ããã®ã§ãå
ã®ç»åãä¿æãããã«ã¯ãã§ãã¯ãå
¥ããŠãããã»ãããããšæããŸã
æ£ç¢ºã«ã¯ Pillow ã§æŸããªããã£ã³ã¯æ
å ±ãæ¬ èœããã£ãœã
ãŸãäœã®æ
å ±ãæ¬ èœãããããããªããææªç»åãå£ããå¯èœæ§ããããããå
ã®ç»åãä¿æãããã«ã¯ãã§ãã¯å
¥ããŠãããã»ããããã§ã
2025幎8æ3æ¥è¿œèš
jpegç»åãæ³šæ
ã©ãããpiexif.dump()ã¯Exifå
šäœãšããŠã¯ããã°ãšã³ãã£ã¢ã³ã§ããæžã蟌ããªãããã (ã³ã¡ã³ãã¯ãªãã«ãšã³ãã£ã¢ã³ã§ãããã£ãœããã©)
æåExifã®ãšã³ãã£ã¢ã³ãšã³ã¡ã³ãã®ãšã³ãã£ã¢ã³ããããŠäœã§ã ïŒããšãªã£ã
çµå±åºåã®ãã€ããªããããã°æã§åºããšããã°ãšã³ãã£ã¢ã³ã£ãŠããšãããã£ã
ãããŸã§Gemini CLIãClaudeãChatGPTã«èããšã©ãããªãã«ãšã³ãã£ã¢ã³ã§ããã¿ããã«èšãããããœãŒã¹ãã¡ã€ã«ãèªã¿èŸŒãŸãããããã°ãšã³ãã£ã¢ã³ã§ããïŒã£ãŠèšãããïœ
ããããïœ
ããããã³ã¡ã³ãã¯ãªãã«ãšã³ãã£ã¢ã³ã§ãããããåéãïŒ
çµå±piexif.dump()ãéããšExifå
šäœã®ãšã³ãã£ã¢ã³ã¯ããã°ãšã³ãã£ã¢ã³ã«ããããããªã®ã§ãå
ã®jpegãã©ã£ã¡ã®ãšã³ãã£ã¢ã³ã§ãã£ãŠãExifå
šäœãšã³ã¡ã³ãäž¡æ¹ãšãããã°ãšã³ãã£ã¢ã³ã«ããããã«å€æŽãã
ã£ãŠããšã§ãšã³ãã£ã¢ã³ãå€ããå¯èœæ§ãããã®ã§ãå
ã®ç»åãä¿æãããã«ãã§ãã¯ã¯å
¥ãããŸãŸããã
以äžãªãã§ã³ã¡ã³ãã¯ãªãã«ãšã³ãã£ã¢ã³ã§æžã蟌ãããã®åãã®çã
1. ExifããŒã¿å šäœã®ãšã³ãã£ã¢ã³ã¯ããã°ãšã³ãã£ã¢ã³:
piexif.dump() ã¯ãExifã®æ§é ïŒIFDãšã³ããªããªãã»ãããTIFFããããŒãªã©ïŒããã€ããªã«å€æããéã«ãåžž
ã«ããã°ãšã³ãã£ã¢ã³ (MM) ã䜿çšããŸããããã¯ãpiexif/_dump.py å ã® struct.pack 颿°ããã¹ãŠ ">"
(ããã°ãšã³ãã£ã¢ã³) ãã©ãŒãããæå®åã䜿ã£ãŠããããšããæããã§ãã
2. `UserComment` 㯠`Undefined` ã¿ã€ã:
UserComment ã¿ã°ã¯Exifæšæºã§ Undefined (ã¿ã€ã7) ãšããŠå®çŸ©ãããŠããŸããããã¯ããã®å 容ãç¹å®ã®ããŒ
ã¿åã«å³å¯ã«çžãããããã€ãåãšããŠæ±ãããããšãæå³ããŸããpiexif ã¯ãã® Undefined
ã¿ã€ãã®ããŒã¿ããäžãããããã€ãåããã®ãŸãŸExifããŒã¿å ã«é 眮ããŸãã
3. `UserComment` ã®å éšãã©ãŒããã:
UserComment ã®å 容ã¯ãéåžžã以äžã®åœ¢åŒã§æ§æãããŸãã
b"UNICODE\x00" + BOM + å®éã®ã³ã¡ã³ãããã¹ãã®ãã€ãå
* b"UNICODE\x00": ããã¯ãç¶ãããŒã¿ãUnicode圢åŒã§ããããšã瀺ããã¬ãã£ãã¯ã¹ã§ãã
* BOM (Byte Order Mark):
ãããéèŠã§ããBOMã¯ãç¶ãUnicodeããã¹ãã®ãã€ãé ïŒãšã³ãã£ã¢ã³ïŒã瀺ãããŒã«ãŒã§ãã
* UTF-16BE (ããã°ãšã³ãã£ã¢ã³): b'\xfe\xff'
* UTF-16LE (ãªãã«ãšã³ãã£ã¢ã³): b'\xff\xfe'
* å®éã®ã³ã¡ã³ãããã¹ãã®ãã€ãå: ããã¯ãæå®ããããšã³ã³ãŒãã£ã³ã°ïŒutf-16-be ãŸãã¯
utf-16-leïŒã§ãšã³ã³ãŒããããã³ã¡ã³ãæååã§ãã
4. `piexif.dump()` ã®åœ¹å²:
piexif.dump() ã¯ãexif_dict['Exif'][piexif.ExifIFD.UserComment] ã«èšå®ããããã€ãåïŒã€ãŸã
b"UNICODE\x00" + BOM + å®éã®ã³ã¡ã³ãããã¹ãïŒãããã®å 容ãè§£éããã倿Žãããããã«ããã®ãŸãŸExifããŒ
ã¿å šäœã®ããã°ãšã³ãã£ã¢ã³æ§é ã®äžã«åã蟌ã¿ãŸãã
çµè«:
piexif.dump() ãçæããExifããŒã¿å šäœã®æ§é ã¯åžžã«ããã°ãšã³ãã£ã¢ã³ã§ãããUserComment
ã®å 容èªäœã®ãšã³ãã£ã¢ã³ã¯ãImageCommentInserter.py åŽã§ comment.encode()
ããéã«æå®ãããšã³ã³ãŒãã£ã³ã°ïŒutf-16-le ãŸã㯠utf-16-beïŒãšãããã«ä»äžããBOMã«ãã£ãŠæ±ºå®ãããŸãã
ãããã£ãŠãUserComment ã®ãã€ãåããªãã«ãšã³ãã£ã¢ã³ã®BOM (b'\xff\xfe') ãš utf-16-le
ãšã³ã³ãŒãã£ã³ã°ã§äœæã㊠piexif.dump() ã«æž¡ãã°ãExifããŒã¿å šäœã®æ§é ãããã°ãšã³ãã£ã¢ã³ã§ãã£ãŠããã³
ã¡ã³ãã®å 容ã¯ãªãã«ãšã³ãã£ã¢ã³ã§æžã蟌ãŸããããšã«ãªããŸãã
2025幎8æ3æ¥è¿œèšãããŸã§
ãã§æžã蟌ãã ãä»åäœã£ãã¢ããªã§èŠãããã£ãŠæãã§ã
ããããã«èŒã£ããŠãããã°ã©ã ã¯å
šéšèªå·±è²¬ä»»ã®ããšã§èªç±ã«ããŠããã§ã
ããã«ããŠãèªåãæ¬²ãããã®ãæç€ºããã ãã§äœããããã«ãªããšã¯ãããããŒ