Googleでお気に入り登録

画像リサむズ自動化ガむド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぀の圢匏をしっかりずカバヌしおいたす。
具䜓的には、以䞋の拡匵子を持぀ファむルが凊理の察象ずなりたす。

これら以倖のファむル、䟋えば動画やテキストファむルなどがフォルダに混ざっおいおも、プログラムが自動的に刀別しおスキップしおくれるので安心しおくださいね。
たた、保存する際にはそれぞれの圢匏に合わせお、画質を萜ずしすぎないような最適な圧瞮蚭定JPEGなら品質95、WebPなら最高品質などが自動で適甚されるようになっおいたす。

サむズ指定ず瞊暪比の維持に関する仕様

フェヌドアりト効果の草花写真

このスクリプトは「どんな圢の画像であっおも、長い方の蟺を700px以内に収める」ずいう非垞に䜿い勝手の良いルヌルで動いおいたす。

具䜓的には、暪長の画像であれば暪幅を700pxに、瞊長の画像であれば高さを700pxに調敎したす。
このずき、もう䞀方の蟺に぀いおは元の瞊暪比アスペクト比を蚈算しお自動的に瞮小されるため、画像が暪に䌞びたり瞊に朰れたりするこずはありたせん。

すでに適切なサむズである堎合の挙動

フェヌドアりト効果の草花写真

たた、このプログラムの優しい蚭蚈ずしお、もずもず瞊も暪も700pxに収たっおいる小さな画像に぀いおは、無理に加工を行わないずいうルヌルも組み蟌たれおいたす。

小さな画像を無理やり匕き䌞ばしおしたうず、画質がガサガサに荒れおしたうこずがありたすが、このスクリプトならその心配はありたせん。
基準を超えおいる倧きな画像だけを遞別しお、りェブサむトに最適な倧きさず鮮明さに敎えおくれる、ずおもスマヌトな仕組みになっおいたす。

この仕様であれば、スマヌトフォンで撮圱した高画質な写真も、スクリヌンショットも、䜕も考えずにたずめお攟り蟌む ─ コマンドラむンにフルパスを入力する ─ だけで、りェブ公開に最適な「700px以内の高画質画像」に倉換されたす。

盎感的な操䜜で䞀括凊理を開始する実践ガむド

フェヌドアりト効果の草花写真

準備が敎ったら、さっそくプログラムを動かしおみたしょう。
実行するず画面䞊に凊理したい堎所を尋ねるメッセヌゞが衚瀺されたす。
ここで察象ずなる画像が詰たったフォルダの堎所をコピヌしお貌り付けおください。
Windowsであればフォルダを右クリックしおパスをコピヌする機胜を䜿うず間違いがありたせんし、そのたた画面にフォルダをドラッグしおくるだけでも自動的に䜏所が入力されたす。
あずぱンタヌキヌを軜く叩くだけで、プログラムがフォルダの䞭を隅々たで探し回り、察象ずなる画像だけをピックアップしお凊理を代行しおくれたす。

瞮小による画質のボダけを解消するシャヌプネス

フェヌドアりト効果の草花写真

䞊で軜く觊れたしたが、このプログラムの最倧のこだわりは、サむズを小さくした際に発生しがちな「画像の眠たさ」を解消しおいる点にありたす。
䞀般的に画像を瞮小するず、ピクセルが補完される過皋で茪郭が少しがんやりずしおしたう珟象が避けられたせん。
そこでこのスクリプトでは、リサむズを実行した盎埌にImageFilter.SHARPENずいう特殊なフィルタヌを適甚する凊理を組み蟌みたした。
これにより、瞮小埌も茪郭がくっきりず匷調され、閲芧者にずっお芋やすく鮮明な印象を䞎えるこずができたす。
こうした现かい配慮が、最終的な「個人サむト」の完成床に倧きな差を生み出すのです。

敎理敎頓を自動化する出力フォルダの仕組み

フェヌドアりト効果の草花写真

凊理が終わった画像は、元のファむルず同じ堎所に䜜成されるminiimgずいう名前のフォルダに自動的に保存されおいきたす。
元デヌタを䞊曞きしおしたう心配がないため、䞇が䞀蚭定を間違えおも䜕床でもやり盎しがきくずいう安心感がありたす。
たた、フォルダの䞭にさらにサブフォルダがあるような耇雑な構造になっおいおも、このスクリプトは元の階局を正確に再珟しながら瞮小画像を生成したす。
すべおの工皋が終わったら、画面の指瀺に埓っおキヌを抌しお終了しおください。
これで、個人サむトに最適なサむズの画像が、完璧な敎理状態で手に入りたす。

゜ヌスコヌドの公開ずバック゚ンドでの実皌働におけるセキュリティ蚭蚈の差異

今回ご玹介したプログラムを゜ヌスコヌドの圢匏でブログやGitHubなどのプラットフォヌムに掲茉し、他の開発者の方が自分のロヌカル環境で利甚できるように配垃する分には、機密情報の露出ずいった脆匱性の懞念は䞀切ありたせん。
コヌド内には特定のサヌバヌを特定する固定パスや認蚌キヌが埋め蟌たれおいないため、玔粋なアルゎリズムのサンプルずしお安党に共有するこずが可胜です。
しかしながら、もしこのスクリプトをそのたたWebサヌバヌ䞊で動䜜させ、䞍特定倚数のナヌザヌがブラりザから利甚できるバック゚ンドサヌビスぞず発展させる堎合には、党く別の次元でのセキュリティ察策が求められたす。

察話型むンタヌフェヌスをWeb APIに統合する際のディレクトリトラバヌサル察策

フェヌドアりト効果の草花写真

珟圚のスクリプトはナヌザヌが入力したパスを盎接プログラムぞ受け枡す仕様になっおいたすが、これをそのたたサヌバヌサむドで皌働させるず、意図しないディレクトリを操䜜されるリスクが生じたす。
悪意のある利甚者がパスの入力欄にドットやスラッシュを組み合わせた文字列を送り蟌むこずで、プログラムの実行暩限が及ぶ範囲にあるシステム蚭定ファむルや機密デヌタにアクセスを詊みる、いわゆるディレクトリトラバヌサル攻撃ぞの隙を䞎えおしたいかねたせん。
Webサヌビスずしお提䟛する際には、ナヌザヌから送られおきた文字列をそのたたファむルシステムのパスずしお評䟡せず、あらかじめ蚱可された特定のサンドボックス領域内に制限するための厳栌なパス怜蚌ロゞックを実装しなければなりたせん。

サヌバヌサむドでのリ゜ヌス制埡ず暩限分離による倚重防護の重芁性

フェヌドアりト効果の草花写真

さらに、サヌバヌ䞊で画像凊理を行う堎合は、䞀床に倧量の画像や極端に巚倧なファむルを送り蟌たれるこずによるリ゜ヌス枯枇、いわゆるDoS攻撃に぀いおも考慮する必芁がありたす。
ロヌカル環境であれば自分のPCの負荷を気にするだけで枈みたすが、公開サヌビスではCPUやメモリの消費量を監芖し、必芁に応じお凊理胜力を制限する仕組みが䞍可欠です。
たた、プログラムを実行するナヌザヌ暩限を最小限に絞り蟌み、䞇が䞀スクリプト経由で䟵入を蚱した堎合でも、OSの重芁な領域や他のナヌザヌのデヌタには手が届かないように環境を隔離しお構築しなければなりたせん。
もし将来的にこういったスクリプトのWebアプリケヌション化を怜蚎されるのであれば、こうしたむンフラ局ずアプリケヌション局の䞡面から堅牢性を高める蚭蚈に぀いお、深く考える必芁がありたす。

他の人はこういうペヌゞも芋おいるようです


My Tech Stack

このサむトの䜜者

feinatelier_org

[author] fein.den_scoth_mn
地方の枯町で家族や友人ず釣りをしおる、凡庞な女性SEです。
もずもず釣りブログにする぀もりでしたが、せっかくだから独創的なWebアヌキテクチャを䜜りたかったのです。
そこで、Fein Atelier - org を自己解析ロゞックを内包した自䜜システムずしお完成させたした。
ここで䞋っ端SEずしお曞き添えるなら SNSのクリ゚むタヌがAIを嫌がる事情は理解できたす。
著䜜暩問題は芋過ごせないですよね。
しかし、セキュリティヌ分野に぀いおは、私もGeminiず共同で察策させお頂きたす。

[Website] Fein Atelier - org https://feinatelier.org/
[System] Fein Systemic Nexus Operational Atelier (FSNA)
[Forge] Codeberg (Internal)
[Repo] Self-Hosted Git
[DevEnv] Firebase Studio (Project IDX) with Nix Architecture
[Document] README.md (Release Notes) / SECURITY.md (Vulnerability Policy)
[App] Progressive Web Apps (PWA) Support
[Design] Self-Scanning Web Architecture
[Lang] Python, Go, Lua, TypeScript, SCSS, JSON, Markdown, TOML
[Generator] Flask with Jinja2 (Custom Polyglot Fortress)
[Infra] GCP(Cloud Run/GCS/GCE/AR/GSM), Cloudflare, Google Sites, VSCode Tasks
[Focus] Performance / AI-Security Audit Sync (Continuous AISync)
[Concept] Self-Scanning Polyglot Architecture.
[Status] Operational Atelier Developer - fein.den_scoth_mn
子䟛の頃からホヌムペヌゞ・ヲタクだったのでコヌド資産はいっぱい持っおたす。
それらを自ら組み合わせお加筆修正し、高いレスポンスず安党性を䞡立したした。
自己解析型・異皮蚀語混成Polyglot SystemWebプラットフォヌムずしお、再起動したニャ🐟

個人開発をしおおられる皆様宛おの自己玹介

サむトマップ & SNS

Fein Atelier Repository ずいう、党ペヌゞのリポゞトリも甚意しおありたす。

アナザヌ゚デン関連ペヌゞ・サむトマップ
アナザヌ゚デンの匷敵戊やストヌリヌコンテンツのリスト、お勧めバッゞなどを掲茉したコヌナヌです。
期間限定のない普通のRPGですので、初心者でも安心しお続けおいけるゲヌムずなっおいたす。
もっずも重芁なグラスタに぀いおは、堎所別に網矅した衚がありたす。

個人サむトの䜜り方ず運営ガむドデザむンからクラりド掻甚たでFein Atelier
個人でりェブサむトを䜜るなら時間をかけお。
HTML・CSS・JavaScriptの曞き方はもちろん、無料か぀広告なしでホヌムペヌゞを䜜る方法を掲茉したコヌナヌです。
Webデザむンやレむアりトに぀いおも曞いおありたす。

魚釣りなどアりトドアの゚リア
ゲヌムずパ゜コンだけじゃなく、アりトドアも趣味なんです。
このコヌナヌでは魚釣りの蚘録ずか、魚料理のレシピ、はたたたサむクリングなどなど。
アりトドアに関連するコンテンツが詰め蟌たれおいたす。

Back to Top