ç»åãªãµã€ãºèªååã¬ã€ãïŒPythonã§å®çŸããé«ç»è³ªäžæ¬å€æãšã»ãã¥ãªãã£ã®åæ
ãµã€ãã®è¡šç€ºé床ãéãããããGoogleããã®è©äŸ¡ãé«ãããããããã«ã¯ãç»åã®ãã¡ã€ã«ãµã€ãºãé©åã«ç®¡çããããšãæ¬ ãããŸããã
ã§ããããããã®åçãäžæãã€æäœæ¥ã§çž®å°ããã®ã¯ãæ°ãé ããªããããªäœæ¥ã§ãããã
ããã§ãPythonãšããããã°ã©ãã³ã°èšèªãå©çšããŠãæå®ãããã©ã«ãå
ã®ç»åããã¹ãŠäžæ¬ã§ãªãµã€ãºãã䟿å©ãªä»çµã¿ãã玹ä»ããŸãã
ãã®ããã°ã©ã ã¯ãåã«ãµã€ãºãå°ããããã ãã§ãªããç»è³ªã®å£åãé²ãããã®å·¥å€«ãåãããŠãããŸãã®ã§ãåå¿è
ã®æ¹ã§ãå®å¿ããŠã¯ãªãªãã£ã®é«ããµã€ãäœããç®æããŸãã
éçºç°å¢ãæŽããããã®ã©ã€ãã©ãªå°å ¥æé
ãã®ã¹ã¯ãªãããåããããã«ã¯ãPythonæ¬äœã«å ããŠãç»ååŠçãå°éã«æ±ãã©ã€ãã©ãªããããããæºåããŠããå¿
èŠããããŸãã
ã³ã³ãã¥ãŒã¿ãŒã®é»ãç»é¢ã§ããã³ãã³ãããã³ãããã¿ãŒããã«ãéããåè§è±æ°ã§ãpip install Pillowããšå
¥åããŠå®è¡ããŠãã ããã
ãã®æäœãè¡ãããšã§ãäžçäžã®éçºè
ãæçšããŠããç»åç·šéçšããã±ãŒãžãã·ã¹ãã ã«çµã¿èŸŒãŸããè€éãªããã°ã©ã ãæžããªããŠãé«åºŠãªç»åæäœãèªç±èªåšã«è¡ããããã«ãªããŸãã
ããã€ã³ã¹ããŒã«äžã«ãšã©ãŒãåºãå Žåã¯ãPythonã®ãã¹èšå®ãæ£ããéã£ãŠãããã確èªããŠã¿ãŠãã ãããã
ããã°ã©ã ãç»åãäžæãã€äžå¯§ã«èªã¿é²ããä»çµã¿
ãã®ããã°ã©ã ã¯èµ·åãããšããŸãåŠçãããç»åãå
¥ã£ãŠããå Žæãå°ããŸãã
å ŽæãæããŠããããšã³ã³ãã¥ãŒã¿ã¯ãã®äžã«ãããã¡ã€ã«ãäžç«¯ããäžç«¯ãŸã§é çªã«ç¢ºèªããŠããç»åãã¡ã€ã«ã ããæ£ç¢ºã«èŠã€ãåºããŸãã
ããšããã©ã«ãã®äžã«ããã«å¥ã®ãã©ã«ããéãªã£ãŠãããããªè€éãªæ§é ã§ãã£ãŠãè¿·ãããšãªã奥深ããŸã§æ¢çŽ¢ãç¶ãèŠã€ããç»åã²ãšã€ã²ãšã€ã«å¯ŸããŠæ±ºãŸã£ãæé ã§åŠçãæœããŠããã®ã倧ããªç¹åŸŽã§ãã
ç»åã700px以å ã«åããïŒ700px.py
import os
import sys
from PIL import Image, ImageFilter
def resize_and_save_image(input_path, output_path, max_size):
"""åå¥ã®ç»åããªãµã€ãºããŠä¿åãã颿°"""
try:
img = Image.open(input_path)
width, height = img.size
needs_resize = width > max_size or height > max_size
if needs_resize:
if width > height:
new_width = max_size
new_height = int(height * (new_width / width))
else:
new_height = max_size
new_width = int(width * (new_height / height))
# ãªãµã€ãºå®è¡
processed_img = img.resize((new_width, new_height), Image.LANCZOS)
# ã·ã£ãŒããã¹ããããŠãã€ãã鲿¢
processed_img = processed_img.filter(ImageFilter.SHARPEN)
else:
processed_img = img
# ä¿åå
ã®ãã£ã¬ã¯ããªãäœæ
os.makedirs(os.path.dirname(output_path), exist_ok=True)
file_ext = os.path.splitext(input_path)[1].lower()
# ãã©ãŒãããå¥ã®ä¿å
if file_ext in ('.jpg', '.jpeg'):
if processed_img.mode != 'RGB':
processed_img = processed_img.convert('RGB')
processed_img.save(output_path, format='jpeg', quality=95, optimize=True, subsampling=0)
elif file_ext == '.png':
processed_img.save(output_path, format='png', optimize=True, compress_level=9)
elif file_ext == '.webp':
processed_img.save(output_path, format='webp', quality=100, method=6)
else:
processed_img.save(output_path)
print(f" [OK] {os.path.basename(output_path)}")
except Exception as e:
print(f" [Error] {os.path.basename(input_path)}: {e}")
def main():
print("========================================")
print(" Image Resizer (700px version)")
print("========================================")
# 1. ãã¹ã®å
¥åïŒåŒçšç¬Šãä»ããŠããŠãåé€ãã芪åèšèšïŒ
target_path = input("åŠçããããã©ã«ãã®ãã¹ãå
¥åããŠãã ãã:\n> ").strip().strip('"').strip("'")
if not target_path:
print("ãšã©ãŒ: ãã¹ãå
¥åãããŸããã§ããã")
return
# 2. ãã¹ã®ååšç¢ºèª
if not os.path.exists(target_path):
print(f"ãšã©ãŒ: æå®ããããã¹ãèŠã€ãããŸãã:\n{target_path}")
return
INPUT_DIR = target_path
OUTPUT_DIR = os.path.join(INPUT_DIR, 'miniimg')
MAX_SIZE_PX = 700
IMAGE_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.webp')
print(f"\n--- åŠçãéå§ããŸã ---")
print(f"å
¥å: {INPUT_DIR}")
print(f"åºå: {OUTPUT_DIR}\n")
for root, _, files in os.walk(INPUT_DIR):
# åºåå
ãã©ã«ã(miniimg)èªäœãååž°åŠçããªãããã«ã¹ããã
if 'miniimg' in root:
continue
# å
¥åãã£ã¬ã¯ããªããã®çžå¯Ÿãã¹ãååŸããŠæ§é ãç¶æ
relative_path = os.path.relpath(root, INPUT_DIR)
for filename in files:
if filename.lower().endswith(IMAGE_EXTENSIONS):
input_file_path = os.path.join(root, filename)
# ä¿åå
ã§ãå
ã®ãã©ã«ãæ§é ãåçŸ
output_file_path = os.path.join(OUTPUT_DIR, relative_path, filename)
resize_and_save_image(input_file_path, output_file_path, MAX_SIZE_PX)
print("\n--- å
šãŠã®åŠçãå®äºããŸããïŒ ---")
input("EnterããŒãæŒããŠçµäºããŠãã ãã...") # ç»é¢ãããã«éããªãããã«
if __name__ == "__main__":
main()
ããŒã ããŒãžã«æé©ãªå€§ãããèªåã§èšç®ããå·¥çš
ç»åãèŠã€ãããšããã°ã©ã ã¯ãã®çžŠãšæšªã®é·ããçŽ æ©ãèšæž¬ããŸãã
ãããããèšå®ãããŠããäžéã®å¹
ãè¶
ããŠããå Žåã«ã¯å
ã®çžŠæšªæ¯ã厩ããŠåçãæªãã§ããŸããªãããã«æ³šæãæããªããæé©ãªãµã€ãºãç®åºãçŽããŸãã
倧ããç»åã¯èªåçã«å°ããæŽããããŸããããšããšåºæºããå°ããªç»åã«ã€ããŠã¯ç¡çã«åŒã䌞ã°ããŠç»è³ªãèœãšãããšããªãããã«ãã®ãŸãŸã®ç¶æ
ã§æ¬¡ã®å·¥çšãžåŒãæž¡ãè³¢ã倿æ©èœãåãã£ãŠããŸãã
ãŒãããé²ãã§é®®æãªä»äžãããå®çŸããç»åå å·¥
ãµã€ãºãå°ãã調æŽããåŸã®ç»åã«ã¯ç¹å¥ãªä»äžãã®åŠçãè¡ãããŸãã
äžè¬çã«ããžã¿ã«ç»åã¯çž®å°ãããšèŒªéãå°ããŒãããŠç ããå°è±¡ã«ãªããã¡ã§ãããã®ããã°ã©ã ã¯ãªãµã€ãºã®çŽåŸã«èŒªéãéç«ãããã·ã£ãŒããã¹ãšããè£æ£ãèªåçã«è¿œå ããŸãã
ãã®ã²ãšæéãå ããããšã«ãã£ãŠãŠã§ããµã€ãã«æ²èŒããéã«ã现éšãŸã§ãã£ãããšèŠããé®®ãããªä»äžãããå®çŸããŠããèŠã人ã«ããã®ãããªå°è±¡ãäžããããšãå¯èœã§ãã
æŽçæŽé ãæ¬ ãããªãä¿åãã©ã«ãã®èªåäœæ
å å·¥ãå®äºããç»åã¯ããšã®ãã¡ã€ã«ãæžãæããŠæ¶ããŠããŸãã®ã§ã¯ãªãå°çšã®æ°ããä¿åå Žæãžæ ŒçŽãããŸãã
å
·äœçã«ã¯å
ã®ãã©ã«ãã®äžã«ããã€ã¡ãŒãžãšããååã®æ°ããå Žæãèªåçã«äœæããŠããã«åŠçæžã¿ã®ããŒã¿ãä¿åããŠããä»çµã¿ã§ãã
å
ã®ãã©ã«ãæ§é ããã®ãŸãŸåçŸããªããä¿åããŠãããããåŸããç»åãæ¢ãéã«ãæ··ä¹±ãçãã«ãããŠã§ããµã€ãã®æŽæ°äœæ¥ãé©ãã»ã©ã¹ã ãŒãºã«é²ãããèšèšãããŠããŸãã
å€åœ©ãªãã¡ã€ã«åœ¢åŒã«å¯Ÿå¿ããæé©ãªä¿ååŠç
åçã«é©ãã圢åŒãã€ã©ã¹ãã«é©ãã圢åŒãªã©ç»åã«ã¯ããã€ãã®çš®é¡ããããŸãããã®ããã°ã©ã ã¯ããããã®åœ¢åŒã«åãããŠæé©ãªä¿åæ¹æ³ãéžæããŸãã
èæ¯ãéæãªç»åãè²é®®ãããªåçãªã©ããããã®ç¹æ§ãå£ããªãããã«é
æ
®ããªããããŒã¿ã®å®¹éãã§ããã ã軜ãããããã«å·¥å€«ãåãããŠæžãåºããŸãã
ãã¹ãŠã®äœæ¥ãçµãããšåŠçãå®äºããããšãç»é¢äžã§å ±åããå
容ã確èªããŠããŒãæŒããŸã§éãã«åŸ
æ©ããŠåœ¹å²ãçµããŸãã
察å¿ããŠããç»åãã©ãŒãããã«ã€ããŠ
ãã®ããã°ã©ã ã¯ããŠã§ããµã€ãã§äžè¬çã«äœ¿ãããäž»èŠãª4ã€ã®åœ¢åŒããã£ãããšã«ããŒããŠããŸãã
å
·äœçã«ã¯ã以äžã®æ¡åŒµåãæã€ãã¡ã€ã«ãåŠçã®å¯Ÿè±¡ãšãªããŸãã
- JPG / JPEGïŒããžã«ã¡åçãªã©ã§æãäžè¬çãªåœ¢åŒïŒ
- PNGïŒããŽãã€ã©ã¹ããªã©ãèæ¯ãéæã«ã§ãã圢åŒïŒ
- WebPïŒGoogleãæšå¥šããŠãããæ¬¡äžä»£ã®è»œéãªç»å圢åŒïŒ
ããã以å€ã®ãã¡ã€ã«ãäŸãã°åç»ãããã¹ããã¡ã€ã«ãªã©ããã©ã«ãã«æ··ãã£ãŠããŠããããã°ã©ã ãèªåçã«å€å¥ããŠã¹ãããããŠãããã®ã§å®å¿ããŠãã ãããã
ãŸããä¿åããéã«ã¯ããããã®åœ¢åŒã«åãããŠãç»è³ªãèœãšããããªããããªæé©ãªå§çž®èšå®ïŒJPEGãªãå質95ïŒ
ãWebPãªãæé«å質ãªã©ïŒãèªåã§é©çšãããããã«ãªã£ãŠããŸãã
ãµã€ãºæå®ãšçžŠæšªæ¯ã®ç¶æã«é¢ãã仿§
ãã®ã¹ã¯ãªããã¯ãã©ããªåœ¢ã®ç»åã§ãã£ãŠããé·ãæ¹ã®èŸºã700px以å ã«åããããšããéåžžã«äœ¿ãåæã®è¯ãã«ãŒã«ã§åããŠããŸãã
å
·äœçã«ã¯ã暪é·ã®ç»åã§ããã°æšªå¹
ã700pxã«ã瞊é·ã®ç»åã§ããã°é«ãã700pxã«èª¿æŽããŸãã
ãã®ãšããããäžæ¹ã®èŸºã«ã€ããŠã¯å
ã®çžŠæšªæ¯ïŒã¢ã¹ãã¯ãæ¯ïŒãèšç®ããŠèªåçã«çž®å°ããããããç»åãæšªã«äŒžã³ããçžŠã«æœ°ãããããããšã¯ãããŸããã
ãã§ã«é©åãªãµã€ãºã§ããå Žåã®æå
ãŸãããã®ããã°ã©ã ã®åªããèšèšãšããŠãããšããšçžŠã暪ã700pxã«åãŸã£ãŠããå°ããªç»åã«ã€ããŠã¯ãç¡çã«å å·¥ãè¡ããªããšããã«ãŒã«ãçµã¿èŸŒãŸããŠããŸãã
å°ããªç»åãç¡çããåŒã䌞ã°ããŠããŸããšãç»è³ªãã¬ãµã¬ãµã«èããŠããŸãããšããããŸããããã®ã¹ã¯ãªãããªããã®å¿é
ã¯ãããŸããã
åºæºãè¶
ããŠãã倧ããªç»åã ããéžå¥ããŠããŠã§ããµã€ãã«æé©ãªå€§ãããšé®®æãã«æŽããŠãããããšãŠãã¹ããŒããªä»çµã¿ã«ãªã£ãŠããŸãã
ãã®ä»æ§ã§ããã°ãã¹ããŒããã©ã³ã§æ®åœ±ããé«ç»è³ªãªåçããã¹ã¯ãªãŒã³ã·ã§ããããäœãèããã«ãŸãšããŠæŸã蟌ã â ã³ãã³ãã©ã€ã³ã«ãã«ãã¹ãå ¥åãã â ã ãã§ããŠã§ãå ¬éã«æé©ãªã700px以å ã®é«ç»è³ªç»åãã«å€æãããŸãã
çŽæçãªæäœã§äžæ¬åŠçãéå§ããå®è·µã¬ã€ã
æºåãæŽã£ããããã£ããããã°ã©ã ãåãããŠã¿ãŸãããã
å®è¡ãããšç»é¢äžã«åŠçãããå Žæãå°ããã¡ãã»ãŒãžã衚瀺ãããŸãã
ããã§å¯Ÿè±¡ãšãªãç»åãè©°ãŸã£ããã©ã«ãã®å Žæãã³ããŒããŠè²Œãä»ããŠãã ããã
Windowsã§ããã°ãã©ã«ããå³ã¯ãªãã¯ããŠãã¹ãã³ããŒããæ©èœã䜿ããšééãããããŸãããããã®ãŸãŸç»é¢ã«ãã©ã«ãããã©ãã°ããŠããã ãã§ãèªåçã«äœæãå
¥åãããŸãã
ããšã¯ãšã³ã¿ãŒããŒã軜ãå©ãã ãã§ãããã°ã©ã ããã©ã«ãã®äžãé
ã
ãŸã§æ¢ãåãã察象ãšãªãç»åã ããããã¯ã¢ããããŠåŠçã代è¡ããŠãããŸãã
çž®å°ã«ããç»è³ªã®ãã€ããè§£æ¶ããã·ã£ãŒããã¹
äžã§è»œãè§ŠããŸãããããã®ããã°ã©ã ã®æå€§ã®ãã ããã¯ããµã€ãºãå°ããããéã«çºçããã¡ãªãç»åã®ç ããããè§£æ¶ããŠããç¹ã«ãããŸãã
äžè¬çã«ç»åãçž®å°ãããšããã¯ã»ã«ãè£å®ãããéçšã§èŒªéãå°ããŒããããšããŠããŸãçŸè±¡ãé¿ããããŸããã
ããã§ãã®ã¹ã¯ãªããã§ã¯ããªãµã€ãºãå®è¡ããçŽåŸã«ImageFilter.SHARPENãšããç¹æ®ãªãã£ã«ã¿ãŒãé©çšããåŠçãçµã¿èŸŒã¿ãŸããã
ããã«ãããçž®å°åŸã茪éããã£ãããšåŒ·èª¿ãããé²èЧè
ã«ãšã£ãŠèŠãããé®®æãªå°è±¡ãäžããããšãã§ããŸãã
ãããã现ããé
æ
®ããæçµçãªãå人ãµã€ããã®å®æåºŠã«å€§ããªå·®ãçã¿åºãã®ã§ãã
æŽçæŽé ãèªååããåºåãã©ã«ãã®ä»çµã¿
åŠçãçµãã£ãç»åã¯ãå
ã®ãã¡ã€ã«ãšåãå Žæã«äœæãããminiimgãšããååã®ãã©ã«ãã«èªåçã«ä¿åãããŠãããŸãã
å
ããŒã¿ãäžæžãããŠããŸãå¿é
ããªããããäžãäžèšå®ãééããŠãäœåºŠã§ãããçŽãããããšããå®å¿æããããŸãã
ãŸãããã©ã«ãã®äžã«ããã«ãµããã©ã«ãããããããªè€éãªæ§é ã«ãªã£ãŠããŠãããã®ã¹ã¯ãªããã¯å
ã®éå±€ãæ£ç¢ºã«åçŸããªããçž®å°ç»åãçæããŸãã
ãã¹ãŠã®å·¥çšãçµãã£ãããç»é¢ã®æç€ºã«åŸã£ãŠããŒãæŒããŠçµäºããŠãã ããã
ããã§ãå人ãµã€ãã«æé©ãªãµã€ãºã®ç»åããå®ç§ãªæŽçç¶æ
ã§æã«å
¥ããŸãã
ãœãŒã¹ã³ãŒãã®å ¬éãšããã¯ãšã³ãã§ã®å®çšŒåã«ãããã»ãã¥ãªãã£èšèšã®å·®ç°
ä»åã玹ä»ããããã°ã©ã ããœãŒã¹ã³ãŒãã®åœ¢åŒã§ããã°ãGitHubãªã©ã®ãã©ãããã©ãŒã ã«æ²èŒããä»ã®éçºè
ã®æ¹ãèªåã®ããŒã«ã«ç°å¢ã§å©çšã§ããããã«é
åžããåã«ã¯ãæ©å¯æ
å ±ã®é²åºãšãã£ãè匱æ§ã®æžå¿µã¯äžåãããŸããã
ã³ãŒãå
ã«ã¯ç¹å®ã®ãµãŒããŒãç¹å®ããåºå®ãã¹ãèªèšŒããŒãåã蟌ãŸããŠããªããããçŽç²ãªã¢ã«ãŽãªãºã ã®ãµã³ãã«ãšããŠå®å
šã«å
±æããããšãå¯èœã§ãã
ããããªããããããã®ã¹ã¯ãªããããã®ãŸãŸWebãµãŒããŒäžã§åäœãããäžç¹å®å€æ°ã®ãŠãŒã¶ãŒããã©ãŠã¶ããå©çšã§ããããã¯ãšã³ããµãŒãã¹ãžãšçºå±ãããå Žåã«ã¯ãå
šãå¥ã®æ¬¡å
ã§ã®ã»ãã¥ãªãã£å¯Ÿçãæ±ããããŸãã
察話åã€ã³ã¿ãŒãã§ãŒã¹ãWeb APIã«çµ±åããéã®ãã£ã¬ã¯ããªãã©ããŒãµã«å¯Ÿç
çŸåšã®ã¹ã¯ãªããã¯ãŠãŒã¶ãŒãå
¥åãããã¹ãçŽæ¥ããã°ã©ã ãžåãæž¡ã仿§ã«ãªã£ãŠããŸãããããããã®ãŸãŸãµãŒããŒãµã€ãã§çšŒåããããšãæå³ããªããã£ã¬ã¯ããªãæäœããããªã¹ã¯ãçããŸãã
æªæã®ããå©çšè
ããã¹ã®å
¥åæ¬ã«ããããã¹ã©ãã·ã¥ãçµã¿åãããæååãéã蟌ãããšã§ãããã°ã©ã ã®å®è¡æš©éãåã¶ç¯å²ã«ããã·ã¹ãã èšå®ãã¡ã€ã«ãæ©å¯ããŒã¿ã«ã¢ã¯ã»ã¹ã詊ã¿ãããããããã£ã¬ã¯ããªãã©ããŒãµã«æ»æãžã®éãäžããŠããŸããããŸããã
WebãµãŒãã¹ãšããŠæäŸããéã«ã¯ããŠãŒã¶ãŒããéãããŠããæååããã®ãŸãŸãã¡ã€ã«ã·ã¹ãã ã®ãã¹ãšããŠè©äŸ¡ããããããããèš±å¯ãããç¹å®ã®ãµã³ãããã¯ã¹é åå
ã«å¶éããããã®å³æ Œãªãã¹æ€èšŒããžãã¯ãå®è£
ããªããã°ãªããŸããã
ãµãŒããŒãµã€ãã§ã®ãªãœãŒã¹å¶åŸ¡ãšæš©éåé¢ã«ããå€éé²è·ã®éèŠæ§
ããã«ããµãŒããŒäžã§ç»ååŠçãè¡ãå Žåã¯ãäžåºŠã«å€§éã®ç»åãæ¥µç«¯ã«å·šå€§ãªãã¡ã€ã«ãéã蟌ãŸããããšã«ãããªãœãŒã¹æ¯æžãããããDoSæ»æã«ã€ããŠãèæ
®ããå¿
èŠããããŸãã
ããŒã«ã«ç°å¢ã§ããã°èªåã®PCã®è² è·ãæ°ã«ããã ãã§æžã¿ãŸãããå
¬éãµãŒãã¹ã§ã¯CPUãã¡ã¢ãªã®æ¶è²»éãç£èŠããå¿
èŠã«å¿ããŠåŠçèœåãå¶éããä»çµã¿ãäžå¯æ¬ ã§ãã
ãŸããããã°ã©ã ãå®è¡ãããŠãŒã¶ãŒæš©éãæå°éã«çµã蟌ã¿ãäžãäžã¹ã¯ãªããçµç±ã§äŸµå
¥ãèš±ããå Žåã§ããOSã®éèŠãªé åãä»ã®ãŠãŒã¶ãŒã®ããŒã¿ã«ã¯æãå±ããªãããã«ç°å¢ãéé¢ããŠæ§ç¯ããªããã°ãªããŸããã
ããå°æ¥çã«ãããã£ãã¹ã¯ãªããã®Webã¢ããªã±ãŒã·ã§ã³åãæ€èšãããã®ã§ããã°ãããããã€ã³ãã©å±€ãšã¢ããªã±ãŒã·ã§ã³å±€ã®äž¡é¢ããå
ç¢æ§ãé«ããèšèšã«ã€ããŠãæ·±ãèããå¿
èŠããããŸãã
ä»ã®äººã¯ããããããŒãžãèŠãŠããããã§ã