2016-07-31 9 views
1

私はこのコードを見つけました:Pythonでイメージを正しく表示するには?

from PIL import Image, ImageTk 
import tkinter as tk 

root = tk.Tk() 

img = Image.open(r"Sample.jpg") 
canvas = tk.Canvas(root, width=500, height=500) 
canvas.pack() 
tk_img = ImageTk.PhotoImage(img) 
canvas.create_image(250, 250, image=tk_img) 

root.mainloop() 

それは500x500pxの解像度で任意の画像を表示します。

from PIL import Image, ImageTk 
import tkinter as tk 

root = tk.Tk() 

img = Image.open(r"D:/1.jpg") 
canvas = tk.Canvas(root, width=img.width, height=img.height) 
canvas.pack() 
tk_img = ImageTk.PhotoImage(img) 
canvas.create_image(img.width/2, img.height/2, image=tk_img) 

root.mainloop() 

しかし、何かが間違っていたと画像604x604pxショーのサイズとウィンドウに602x602pxのサイズではなく、ウィンドウのサイズが正しいこと:私はそれを変更し、元のサイズで表示してみました。 Take a look (full image)。 私は何が間違っていますか?

P.S.悪い英語で申し訳ありません。

答えて

0

あなたの最初の例では、まだ数ピクセルだけ切り取っています。すべてのトップレベルウィンドウには、他の要素が境界線に「出血」してプロフェッショナルではないように、絶対的な境界線の周りにパディングがあります。

まだ604ピクセル×604ピクセルのキャンバスが与えられていますが、ルートウィンドウ自体がそのパディングをアサートしています。私はこのトップレベルのパディングを削除する方法を見つけることができませんでした、そして、それは他のオペレーティングシステムで異なって現われるかもしれません。回避策は、表示したい画像よりも少し大きいキャンバスサイズを要求することです。お使いの幅または高さが奇数であれば、オフずつエラーを作成することができ

別の問題あなたが精度を目指している場合は、行になります...

canvas.create_image(img.width/2, img.height/2, image=tk_img) 

。あなたは北西隅に画像を固定して、このようなのような座標(0, 0)でそれらを置くことができます。

canvas.create_image(0, 0, anchor=tk.NW, image=tk_img) 
+0

質問にリンクされ、スクリーンショットは、ウィンドウの境界のサイズが含まれていないことを示し、追加の空白がありますウィンドウ枠と画像の間のスペース。 –