💬

png_webp一括変換コード

に公開

フォルダの中身すべてを、指定フォルダに圧縮し、コピーします。

必要なライブラリのインストール

まず、画像処理ライブラリである Pillow をインストールする必要があります。コマンドプロンプトやターミナルで以下のコマンドを実行してください。

Bash

pip install Pillow

以下コード

import os
from PIL import Image

def convert_png_to_webp_in_folder(input_folder, output_folder, quality=80):
    """
    指定されたフォルダ内のすべてのPNG画像をWebP形式に変換し、指定された出力フォルダに保存します。

    Args:
        input_folder (str): 入力PNG画像が格納されているフォルダのパス。
        output_folder (str): 変換されたWebP画像を保存するフォルダのパス。
        quality (int): WebP画像の品質 (0-100)。デフォルトは80。
    """
    if not os.path.exists(input_folder):
        print(f"エラー: 入力フォルダが見つかりません: '{input_folder}'")
        return

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"出力フォルダを作成しました: '{output_folder}'")

    converted_count = 0
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".png"):
            input_path = os.path.join(input_folder, filename)
            # 拡張子を.webpに変更
            output_filename = os.path.splitext(filename)[0] + ".webp"
            output_path = os.path.join(output_folder, output_filename)

            try:
                with Image.open(input_path) as img:
                    img.save(output_path, "webp", quality=quality)
                print(f"'{filename}' を '{output_filename}' に変換しました。")
                converted_count += 1
            except Exception as e:
                print(f"'{filename}' の変換中にエラーが発生しました: {e}")

    if converted_count > 0:
        print(f"\n合計 {converted_count} 個のPNG画像をWebPに変換しました。🎉")
    else:
        print("\n変換対象のPNG画像は見つかりませんでした。🤔")

if __name__ == "__main__":
    print("PNG画像をWebPに一括変換します。")

    # 入力ディレクトリの指定
    while True:
        input_dir = input("変換したいPNG画像が入っているフォルダのパスを入力してください(例: C:\\Users\\user\\Pictures\\PNGs): ")
        # 両端の引用符を削除し、Windowsのパスのバックスラッシュをスラッシュに変換
        input_dir = input_dir.strip('"').replace('\\', '/')
        if os.path.isdir(input_dir):
            break
        else:
            print("指定された入力フォルダが見つかりません。もう一度入力してください。")

    # 出力ディレクトリの指定
    while True:
        output_dir = input("変換後のWebP画像を保存するフォルダのパスを入力してください(例: C:\\Users\\user\\Pictures\\WebPs): ")
        # 両端の引用符を削除し、Windowsのパスのバックスラッシュをスラッシュに変換
        output_dir = output_dir.strip('"').replace('\\', '/')
        # 出力フォルダが存在しない場合は作成を試みる
        if not os.path.exists(output_dir):
            try:
                os.makedirs(output_dir)
                print(f"出力フォルダ '{output_dir}' を作成しました。")
                break
            except Exception as e:
                print(f"出力フォルダの作成に失敗しました: {e}")
                print("もう一度入力してください。")
        else:
            break

    # 品質の設定
    while True:
        try:
            quality_str = input("WebP画像の品質を0から100で入力してください(例: 85、デフォルトは80): ")
            if not quality_str: # 空Enterの場合はデフォルト値を使用
                conversion_quality = 80
                print(f"品質をデフォルトの {conversion_quality} に設定しました。")
                break
            conversion_quality = int(quality_str)
            if 0 <= conversion_quality <= 100:
                break
            else:
                print("品質は0から100の間の整数で入力してください。")
        except ValueError:
            print("無効な入力です。整数を入力してください。")

    convert_png_to_webp_in_folder(input_dir, output_dir, conversion_quality)

おまけ jpeg変換

import os
from PIL import Image

def convert_png_to_jpg_in_folder(input_folder, output_folder, quality=80):
    """
    指定されたフォルダ内のすべてのPNG画像をjpeg形式に変換し、指定された出力フォルダに保存します。

    Args:
        input_folder (str): 入力PNG画像が格納されているフォルダのパス。
        output_folder (str): 変換されたjpg画像を保存するフォルダのパス。
        quality (int): jpg画像の品質 (0-100)。デフォルトは80。
    """
    if not os.path.exists(input_folder):
        print(f"エラー: 入力フォルダが見つかりません: '{input_folder}'")
        return

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"出力フォルダを作成しました: '{output_folder}'")

    converted_count = 0
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(".png"):
            input_path = os.path.join(input_folder, filename)
            # 拡張子を.jpgに変更
            output_filename = os.path.splitext(filename)[0] + ".jpg"
            output_path = os.path.join(output_folder, output_filename)

            try:
                with Image.open(input_path) as img:
                    img.save(output_path, "jpeg", quality=quality)
                print(f"'{filename}' を '{output_filename}' に変換しました。")
                converted_count += 1
            except Exception as e:
                print(f"'{filename}' の変換中にエラーが発生しました: {e}")

    if converted_count > 0:
        print(f"\n合計 {converted_count} 個のPNG画像をjpgに変換しました。🎉")
    else:
        print("\n変換対象のPNG画像は見つかりませんでした。🤔")

if __name__ == "__main__":
    print("PNG画像をjpgに一括変換します。")

    # 入力ディレクトリの指定
    while True:
        input_dir = input("変換したいPNG画像が入っているフォルダのパスを入力してください(例: C:\\Users\\user\\Pictures\\PNGs): ")
        # 両端の引用符を削除し、Windowsのパスのバックスラッシュをスラッシュに変換
        input_dir = input_dir.strip('"').replace('\\', '/')
        if os.path.isdir(input_dir):
            break
        else:
            print("指定された入力フォルダが見つかりません。もう一度入力してください。")

    # 出力ディレクトリの指定
    while True:
        output_dir = input("変換後のjpg画像を保存するフォルダのパスを入力してください(例: C:\\Users\\user\\Pictures\\jpgs): ")
        # 両端の引用符を削除し、Windowsのパスのバックスラッシュをスラッシュに変換
        output_dir = output_dir.strip('"').replace('\\', '/')
        # 出力フォルダが存在しない場合は作成を試みる
        if not os.path.exists(output_dir):
            try:
                os.makedirs(output_dir)
                print(f"出力フォルダ '{output_dir}' を作成しました。")
                break
            except Exception as e:
                print(f"出力フォルダの作成に失敗しました: {e}")
                print("もう一度入力してください。")
        else:
            break

    # 品質の設定
    while True:
        try:
            quality_str = input("jpg画像の品質を0から100で入力してください(例: 85、デフォルトは80): ")
            if not quality_str: # 空Enterの場合はデフォルト値を使用
                conversion_quality = 80
                print(f"品質をデフォルトの {conversion_quality} に設定しました。")
                break
            conversion_quality = int(quality_str)
            if 0 <= conversion_quality <= 100:
                break
            else:
                print("品質は0から100の間の整数で入力してください。")
        except ValueError:
            print("無効な入力です。整数を入力してください。")

    convert_png_to_jpg_in_folder(input_dir, output_dir, conversion_quality)

Discussion