Webpからjpeg,pngに変換できるPythonスクリプトを作って、PySimpleGUIでGUI化した(追記あり)

作った経緯

何とは言わないんですが、とあるサイトで画像をダウンロードすると全てWebpになっちゃうんですよね。これ、Windows標準ソフトで開かずにブラウザで開いちゃうので非常に厄介。というわけで睡眠を2時間まで削って制作。同じサイトを使っている方の助けになれば何よりです。

変換サイトで大量にやるとあまりにも時間がかかるし枚数制限があって面倒

ソースコード

import os
import PySimpleGUI as sg
from PIL import Image

def convert_images(input_folder, output_folder, extension):
    extension = extension.lower()

    file_names = os.listdir(input_folder)

    for file_name in file_names:
        if not file_name.lower().endswith(".webp"):
            continue

        try:
            image = Image.open(os.path.join(input_folder, file_name))
        except OSError:
            sg.popup(f"画像{file_name}を開けませんでした")
            continue

        new_file_name = os.path.splitext(file_name)[0] + f"{extension}"
        output_file_path = os.path.join(output_folder, new_file_name)

        try:
            image.save(output_file_path)
        except OSError:
            sg.popup(f"画像{file_name}の変換に失敗しました")
            continue

        sg.popup(f"画像{file_name}{new_file_name}に変換して{output_folder}に保存しました")

    if sg.popup_yes_no("変換が完了しました。他のファイルの変換も行いますか?") == "Yes":
        convert_images(input_folder, output_folder, extension)

layout = [
    [sg.Text("変換元のフォルダを選択してください")],
    [sg.Input(key="input_folder"), sg.FolderBrowse()],
    [sg.Text("変換先のフォルダを選択してください")],
    [sg.Input(key="output_folder"), sg.FolderBrowse()],
    [sg.Text("変換後の形式を選択してください")],
    [sg.Radio("jpeg", group_id="extension", key="jpeg", default=True), sg.Radio("png", group_id="extension", key="png")],
    [sg.Button("変換"), sg.Button("終了")],
]

window = sg.Window("Webp画像からjpeg,pngに変換", layout)

while True:
    event, values = window.read()

    if event in (None, "終了"):
        break

    if event == "変換":
        input_folder = values["input_folder"]
        output_folder = values["output_folder"]
        extension = ".jpg" if values["jpeg"] else ".png"

        os.makedirs(output_folder, exist_ok=True)

        convert_images(input_folder, output_folder, extension)

window.close()

PyInstallerでexe化したもの

と、ここであることに気づく

jpegやpngに変換してもWebpを削除する機能はつけていなかった。
今更面倒なので別で作成。

ソースコード

import os
import PySimpleGUI as sg

def delete_webp_files(folder_path):
    file_list = os.listdir(folder_path)
    for file_name in file_list:
        if file_name.endswith(".webp"):
            file_path = os.path.join(folder_path, file_name)
            os.remove(file_path)

def main():
    sg.theme('DefaultNoMoreNagging')
    layout = [
        [sg.Text('削除するフォルダパスを選択してください')],
        [sg.Input(key='-FOLDER_PATH-'), sg.FolderBrowse()],
        [sg.Text('')],
        [sg.Button('削除'), sg.Button('終了')],
    ]
    window = sg.Window('webp削除プログラム', layout)

    while True:
        event, values = window.read()

        if event == sg.WIN_CLOSED or event == '終了':
            break

        if event == '削除':
            folder_path = values['-FOLDER_PATH-']
            if folder_path != '':
                delete_webp_files(folder_path)
                sg.popup('削除が完了しました。')
            else:
                sg.popup('フォルダパスが指定されていません。')

            response = sg.popup_yes_no('他のwebpファイルも削除しますか?')
            if response == 'No':
                break

    window.close()

if __name__ == '__main__':
    main()

exe化したもの

この記事が気に入ったらサポートをしてみませんか?