直接上代码
from PIL import Image, ImageDraw, ImageTk
import tkinter as tk
from tkinter import filedialog
def convert_to_circle(image_path):
# 打开画像とRGBAモードに変換する
image = Image.open(image_path).convert("RGBA")
# 画像と同じサイズの透明な背景画像を作成する
circle_image = Image.new('RGBA', image.size, (0, 0, 0, 0))
# 描画オブジェクトを作成する
draw = ImageDraw.Draw(circle_image)
# 円を描く
draw.ellipse((0, 0, image.size[0], image.size[1]), fill=(255, 255, 255, 255))
# 元の画像をマスクに適用する
circle_image.paste(image, (0, 0), mask=circle_image)
# 円形のエッジ画像を返す
return circle_image
def select_image():
# ファイルダイアログを開き、画像ファイルを選択する
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png")])
# 画像ファイルが選択された場合、変換してプログラム内で表示する
if file_path:
circle_image = convert_to_circle(file_path)
circle_image.thumbnail((300, 300)) # 表示領域に合わせて画像を縮小する
photo = ImageTk.PhotoImage(circle_image) # 画像をPhotoImageオブジェクトに変換する
image_label.configure(image=photo)
image_label.image = photo # 画像への参照を保持する
image_label.circle_image = circle_image # 元のPIL画像を保存する
def save_image():
# 現在表示されている画像を取得する
circle_image = image_label.circle_image
# 画像がある場合、ファイルとして保存する
if circle_image:
save_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png")])
if save_path:
circle_image.save(save_path)
print("ヘッダーが保存されました:", save_path)
# メインウィンドウを作成する
window = tk.Tk()
window.title("円形ヘッダー変換")
window.geometry("400x400")
# 選択ボタンを作成する
select_button = tk.Button(window, text="画像を選択", command=select_image)
select_button.pack(pady=10)
# 画像表示領域を作成する
image_label = tk.Label(window)
image_label.pack()
# 保存ボタンを作成する
save_button = tk.Button(window, text="画像を保存", command=save_image)
save_button.pack(pady=10)
# メインループを実行する
window.mainloop()
まず、必要なライブラリをインポートします。PIL ライブラリは画像処理に、tkinter ライブラリは GUI インターフェースの作成に使用されます。
次に、convert_to_circle という関数を定義します。この関数は選択した画像を円形の画像に変換するためのものです。この関数は画像のパスを引数として受け取り、変換後の円形の画像を返します。
convert_to_circle 関数では、まず画像を開き RGBA モードに変換します。次に、元の画像と同じサイズの透明な背景画像を作成します。その後、描画オブジェクトを作成し、そのオブジェクトを使用して円を描きます。円の位置とサイズは元の画像と同じで、白色で塗りつぶされます。最後に、元の画像を透明な背景画像に適用し、透明な背景画像をマスクとして使用します。最終的に、変換後の円形の画像を返します。
次に、select_image という関数を定義します。この関数は画像ファイルを選択し、それを円形の画像に変換します。この関数では、ファイルダイアログを開き、画像ファイルを選択し、選択されたファイルのパスを取得します。画像ファイルが選択された場合、convert_to_circle 関数を呼び出して画像を円形に変換します。その後、画像を表示領域に合わせて縮小し、プログラム内の画像ラベルに表示します。
最後に、save_image という関数を定義します。この関数は現在表示されている円形の画像をファイルとして保存します。この関数では、表示されている円形の画像を取得し、ファイルダイアログを開いて保存パスを選択します。保存パスが選択された場合、画像をファイルとして保存します。
メインプログラムでは、メインウィンドウを作成し、タイトルとサイズを設定します。次に、選択ボタンを作成し、ボタンがクリックされた時に select_image 関数を呼び出します。その後、画像表示領域のためのラベルを作成します。最後に、保存ボタンを作成し、ボタンがクリックされた時に save_image 関数を呼び出します。
最後に、メインループを実行してアプリケーションを起動し、ユーザーの操作を待ちます。
このコードでは、画像処理のために PIL ライブラリ(Python Imaging Library)を使用し、tkinter ライブラリを使用して画像を表示しています。画像を PhotoImage オブジェクトに変換し、それを画像表示領域の image 属性に割り当てることで、画像を表示しています。同時に、保存時に元の PIL 画像への参照を保持しています。