【Python練習-009】PythonとTkinterで作る!WEBPからPNGへ簡単画像変換アプリ
概要
このPythonコードは、GUIを使用してWEBP形式の画像ファイルをPNG形式に変換するアプリケーションを作成するためのものです。
実行画面は次のようになります。
GUIの部分はTkinterを使用しており、ユーザーはフォルダを選択できるようになっています。変換機能では、選択されたフォルダ内の全てのWEBPファイルをPNGに変換し、元のファイルを別のフォルダに移動させます。このプロセスはエラー管理も含まれています。
ライブラリをインストール
まずはライブラリをインストールしましょう
pip install pillow
生成AIを利用(プロンプト)
生成AIに手伝ってもらいました。
このコードを生成するためのプロンプトは次のようになります:
コード
import os
from PIL import Image
def convert_webp_to_png(source_folder, dest_folder):
# 変換済みのwebpファイルを移動するためのフォルダを作成
done_folder = os.path.join(source_folder, 'done')
os.makedirs(done_folder, exist_ok=True)
# sourceフォルダ内のwebpファイルをpngに変換し、変換済みファイルをdoneフォルダに移動
for filename in os.listdir(source_folder):
if filename.endswith('.webp'):
source_path = os.path.join(source_folder, filename)
dest_path = os.path.join(dest_folder, os.path.splitext(filename)[0] + '.png')
done_path = os.path.join(done_folder, filename)
try:
with Image.open(source_path).convert("RGB") as im:
im.save(dest_path)
os.rename(source_path, done_path)
except Exception as e:
print(f'Error converting {filename}: {e}')
import tkinter as tk
from tkinter import filedialog
def browse_source_folder():
source_folder = filedialog.askdirectory()
source_folder_entry.delete(0, tk.END)
source_folder_entry.insert(0, source_folder)
def browse_dest_folder():
dest_folder = filedialog.askdirectory()
dest_folder_entry.delete(0, tk.END)
dest_folder_entry.insert(0, dest_folder)
def run_conversion():
source_folder = source_folder_entry.get()
dest_folder = dest_folder_entry.get()
if source_folder and dest_folder:
convert_webp_to_png(source_folder, dest_folder)
else:
error_label.config(text='ソースフォルダとデスティネーションフォルダを選択してください')
root = tk.Tk()
root.title('webp to png converter')
source_folder_label = tk.Label(root, text='ソースフォルダ:')
source_folder_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')
source_folder_entry = tk.Entry(root, width=50)
source_folder_entry.grid(row=0, column=1, padx=5, pady=5)
source_browse_button = tk.Button(root, text='参照', command=browse_source_folder)
source_browse_button.grid(row=0, column=2, padx=5, pady=5)
dest_folder_label = tk.Label(root, text='デスティネーションフォルダ:')
dest_folder_label.grid(row=1, column=0, padx=5, pady=5, sticky='w')
dest_folder_entry = tk.Entry(root, width=50)
dest_folder_entry.grid(row=1, column=1, padx=5, pady=5)
dest_browse_button = tk.Button(root, text='参照', command=browse_dest_folder)
dest_browse_button.grid(row=1, column=2, padx=5, pady=5)
convert_button = tk.Button(root, text='コンバート', command=run_conversion)
convert_button.grid(row=2, column=1, padx=5, pady=5)
error_label = tk.Label(root, text='', fg='red')
error_label.grid(row=3, column=1, padx=5, pady=5)
root.mainloop()
きちんと動きました。
自分が欲しい動作をするコードが得られるまで、プロンプトを微調整しながら、何回か試行錯誤しました。
関連記事
では🌸
この記事が気に入ったらサポートをしてみませんか?