前提
Pythonでpillowとtkinterを用い、画面クリックで画像が回転するコードを作成しています。
実行したい動作そのものはできていますが、動作が進むにすれて画質が悪くなってしまいます。
実現したいこと
画面クリックで画像を回転させた際、画質を保ちたいと考えています。
添付のコードは10degごとに回転させていますが、
コードをブラッシュアップしていくなかで、
0.0001degごとに回転させるつもりです。
細かい角度設定にも耐えうる、「画質の低下を防ぐアイデア」をいただけないでしょうか。
発生している問題・エラーメッセージ
特にありません。
該当のソースコード
Python
1#---SVV測定に使用する画像の作成--- 2 3from PIL import Image, ImageDraw 4 5#背景色が黒色のキャンパスを作成。 6im = Image.new('RGB', (500, 500), (0, 0, 0)) 7draw = ImageDraw.Draw(im) 8 9#中央に線を描画 10draw.line((50, 250, 450, 250), fill=(255, 255, 255), width=10) 11 12#同じサイズの画像を作成 13im_clear = Image.new("RGBA", im.size, (0, 0, 0, 0)) 14width = im.size[0] 15height = im.size[1] 16 17for x in range(width): 18 for y in range(height): 19 pixel = im.getpixel( (x, y) ) 20 21 # 黒なら処理しない 22 if pixel[0] == 0 and pixel[1] == 0 and pixel[2] == 0: 23 continue 24 25 # 黒以外なら、用意した画像にピクセルを書き込み 26 im_clear.putpixel( (x, y), pixel ) 27 28#SVVで表示させるバーをpng形式で保存 29im_clear.save("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png", quality=100) 30 31 32#---測定コード--- 33 34import tkinter as tk 35from PIL import Image, ImageTk 36 37 38#画面サイズの指定 39WIDTH = 1300 40HEIGHT = 800 41 42#新規ウィンドウを作成 43root = tk.Tk() 44canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="black") 45canvas.pack() 46 47#ウィンドウにSVV画像を貼り付け 48img = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png") 49img = img.rotate(0) 50tkimg = ImageTk.PhotoImage(img, width=WIDTH, height=HEIGHT) 51canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 52 53#イベントが発生したときの処理 54def press_L(event): 55 #左クリックで、画像を左回転させる 56 global img 57 global tkimg 58 img = img.rotate(10) 59 tkimg = ImageTk.PhotoImage(img) 60 canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 61 62def press_R(event): 63 #右クリックで、画像を右回転させる 64 global img 65 global tkimg 66 img = img.rotate(-10) 67 tkimg = ImageTk.PhotoImage(img) 68 canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 69 70#左クリックで呼び出すイベント 71canvas.tag_bind("img", "<ButtonPress-1>", press_L) 72 73#右クリックで呼び出すイベント 74canvas.tag_bind("img", "<ButtonPress-3>", press_R) 75 76#メインループ 77root.mainloop()
試したこと
回転角度を40degより小さく設定するにつれて、画像の乱れが増加します。
補足情報(FW/ツールのバージョンなど)
Anacondaを用いてPythonを使用しています。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/08/17 07:44