前提・実現したいこと
下記イメージはZOZOTOWNの画像拡大プレビューの様子
画像左にある原画像内にマウスで移動させると、マウス周辺の薄い白枠部分が拡大画像として右側に表示される。
また、マウスの動きに追従してプレビュー画像も変化し、マウスが原画像上から外れると拡大画像は消える。
作りたいもの
イメージの様に、画像を読み込んで、
- 画像内の座標にマウスがある場合、隣にマウス位置周辺の拡大画像を2つ(カラーとモノクロ)表示させる
- 画像内でマウスの座標が変化すると、拡大画像も動的に変化する。
- 画像内の座標からマウスが抜けると、拡大画像が消える
ようなシステムを作りたいと考えています。
単純に画像の拡大画像を隣に表示させることはできたのですが、
マウス座標との関連付けや、動的な変化のコードの作成方法がイメージできず
アルゴリズムや、参考コードなどわかる方がいらっしゃればアドバイス・ご教示をぜひお願いします。
試したこと(今のところできている部分のコード)
Python3
1import tkinter 2from PIL import Image, ImageTk 3from tkinter import font 4 5# windowを描画 6window = tkinter.Tk() 7# windowサイズを変更 8window.geometry("1500x700") 9# windowタイトルを設定 10window.title("Image Viewer") 11# 画像を表示するための準備 12img = Image.open('任意画像') 13img = img.resize((608, 456)) 14img2 = img.convert('L') 15im_crop = img.crop((100, 50, 200, 150)) 16im_crop = im_crop.resize((200, 200)) 17im_crop2 = img2.crop((100, 50, 200, 150)) 18im_crop2 = im_crop2.resize((200, 200)) 19 20img = ImageTk.PhotoImage(img) 21img2 = ImageTk.PhotoImage(im_crop) 22img3 = ImageTk.PhotoImage(im_crop2) 23 24# 画像を表示するためのキャンバス作成 25canvas = tkinter.Canvas( bg = "gray", width=1500, height=700) 26canvas.place(x=50, y=25) 27 28# キャンバスに画像と文字を表示 29canvas.pack() 30canvas.create_image(50, 100, image=img, anchor=tkinter.NW) 31canvas.create_image(758, 100, image=img2, anchor=tkinter.NW) 32canvas.create_image(1058, 100, image=img3, anchor=tkinter.NW) 33 34font = font.Font(family='Arial', size=16, weight='bold') 35image_title = tkinter.Label(text='Original Image', bg = "gray", font=font) 36canvas.create_text(50, 60, text='Original Image', anchor=tkinter.NW, font=font) 37image_title2 = tkinter.Label(text='Enlarged Image', bg = "gray", font=font) 38canvas.create_text(758, 60, text='Enlarged Image', anchor=tkinter.NW, font=font) 39image_title3 = tkinter.Label(text='Enlarged Image (monochrome)', bg = "gray", font=font) 40canvas.create_text(1058, 60, text='Enlarged Image (monochrome)', anchor=tkinter.NW, font=font) 41 42window.mainloop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/04 13:09
2020/08/04 22:13
2020/08/04 23:11