Webpからjpeg,pngに変換できるPythonスクリプトを作って、PySimpleGUIでGUI化した(追記あり)
作った経緯
何とは言わないんですが、とあるサイトで画像をダウンロードすると全てWebpになっちゃうんですよね。これ、Windows標準ソフトで開かずにブラウザで開いちゃうので非常に厄介。というわけで睡眠を2時間まで削って制作。同じサイトを使っている方の助けになれば何よりです。
![](https://assets.st-note.com/img/1683553419590-YYaXmfXFGa.png?width=1200)
ソースコード
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()