質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

tkinterで画質を保ちながら画像を回転したい。

ppap
ppap

総合スコア66

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0リアクション

0クリップ

259閲覧

投稿2022/08/17 07:04

前提

Pythonでpillowとtkinterを用い、画面クリックで画像が回転するコードを作成しています。
実行したい動作そのものはできていますが、動作が進むにすれて画質が悪くなってしまいます。

実現したいこと

画面クリックで画像を回転させた際、画質を保ちたいと考えています。
添付のコードは10degごとに回転させていますが、
コードをブラッシュアップしていくなかで、
0.0001degごとに回転させるつもりです。

細かい角度設定にも耐えうる、「画質の低下を防ぐアイデア」をいただけないでしょうか。

発生している問題・エラーメッセージ

特にありません。

該当のソースコード

Python

#---SVV測定に使用する画像の作成--- from PIL import Image, ImageDraw #背景色が黒色のキャンパスを作成。 im = Image.new('RGB', (500, 500), (0, 0, 0)) draw = ImageDraw.Draw(im) #中央に線を描画 draw.line((50, 250, 450, 250), fill=(255, 255, 255), width=10) #同じサイズの画像を作成 im_clear = Image.new("RGBA", im.size, (0, 0, 0, 0)) width = im.size[0] height = im.size[1] for x in range(width): for y in range(height): pixel = im.getpixel( (x, y) ) # 黒なら処理しない if pixel[0] == 0 and pixel[1] == 0 and pixel[2] == 0: continue # 黒以外なら、用意した画像にピクセルを書き込み im_clear.putpixel( (x, y), pixel ) #SVVで表示させるバーをpng形式で保存 im_clear.save("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png", quality=100) #---測定コード--- import tkinter as tk from PIL import Image, ImageTk #画面サイズの指定 WIDTH = 1300 HEIGHT = 800 #新規ウィンドウを作成 root = tk.Tk() canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="black") canvas.pack() #ウィンドウにSVV画像を貼り付け img = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png") img = img.rotate(0) tkimg = ImageTk.PhotoImage(img, width=WIDTH, height=HEIGHT) canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") #イベントが発生したときの処理 def press_L(event): #左クリックで、画像を左回転させる global img global tkimg img = img.rotate(10) tkimg = ImageTk.PhotoImage(img) canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") def press_R(event): #右クリックで、画像を右回転させる global img global tkimg img = img.rotate(-10) tkimg = ImageTk.PhotoImage(img) canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") #左クリックで呼び出すイベント canvas.tag_bind("img", "<ButtonPress-1>", press_L) #右クリックで呼び出すイベント canvas.tag_bind("img", "<ButtonPress-3>", press_R) #メインループ root.mainloop()

試したこと

回転角度を40degより小さく設定するにつれて、画像の乱れが増加します。

補足情報(FW/ツールのバージョンなど)

Anacondaを用いてPythonを使用しています。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/08/17 07:16

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。