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

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

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

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

2回答

1420閲覧

Pythonで画像を取り込み描画した結果、サイズが小さくなって表示される原因を知りたい

Natthy

総合スコア10

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2018/08/19 02:07

Pythonを勉強し始めた初心者です。

画像を取り込んで表示させるサンプルコードを実行した所、
ウィンドウいっぱいに画像が表示される想定の処理で、
画像が縮小されて表示される結果になりました。

具体的には、
600x450のCanvasに、600x450のjpg画像を取り込んで描画した結果、
半分ほどのサイズに縮小され表示されました。

なぜこの実装で画像が縮小されるのかが分からずに詰まっています。
実装が誤っているのか、あるいはこの挙動で正常なのか、
教えて頂けますでしょうか。

該当のソースコード

import tkinter as tki
from PIL import ImageTk, Image

root = tki.Tk()
cv = tki.Canvas(root, width=600, height=450)
cv.pack()

filename = "photo.jpg"
img = Image.open(filename)
print("size={0}x{1}".format(img.width, img.height))

img_tk = ImageTk.PhotoImage(img)
cv.create_image(0, 0, image = img_tk)

root.mainloop()

###実行結果
イメージ説明

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

Windows10(64bit)
Python3.6
Anaconda/Spider

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「tkinter canvas create_image size show」でググるとTkinter canvas doesn't show entire photo image

diff

1-cv.create_image(0, 0, image=img_tk) 2+cv.create_image(0, 0, image=img_tk, anchor=tki.NW)

投稿2018/08/19 04:46

編集2018/08/19 04:57
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Natthy

2018/08/19 10:55

教えて頂いた内容で解決しました。 anchorの設定が無かった事が原因でした。 的確な回答を頂き、ありがとうございました。
guest

0

おはようございます。

問題文読ませていただきました。

canvas Widgetを使った場合の、(0, 0)座標から画像を描画するデフォルト値が、画像の真ん中になっていることが原因ですね。

anchor optionを利用して、(0, 0)座標から画像を描画するデフォルト値を、左上へ設定してあげるとうまく行きます。

python

1import tkinter as tki 2from PIL import ImageTk, Image 3 4# Windowを作成する。 5root = tki.Tk() 6 7# Windowを親要素として、canvas Widgetを作成する。 8# width : 幅の設定 9# height : 高さの設定 10# Canvasについて : https://kuroro.blog/python/ANyM9WLpd0LSXRQAELOj/ 11cv = tki.Canvas(root, width=600, height=450) 12# Windowを親要素として、canvas Widgetをどのように表示するのか? 13# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 14cv.pack() 15 16# ファイルパスを宣言 17filename = "/path_to/xxx.xxx" 18# 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/ 19# Tkinter 8.6以降でも、標準Tkinterではjpg対応できないため、PILを利用する。 20# 公式ドキュメント(画像) : https://docs.python.org/ja/3/library/tkinter.html#images 21# ファイルopenコマンドについて : https://carp.cc.it-hiroshima.ac.jp/~tateyama/Lecture/AppEx/PythonImagePIL.html 22img = Image.open(filename) 23# TkinterのWidgetで画像が扱える形へ変更する。 24img_tk = ImageTk.PhotoImage(img) 25 26# 第一引数 x座標 : 0 27# 第二引数 y座標 : 0 28# <option> 29# image : 表示するimage情報 30# anchor : 画像の配置を変更する。デフォルトで画像の真ん中を(0, 0)としているので、画像の左上を(0, 0)と変更する。 31# NW : north westの略。 32# 戻り値 : ID 33# Canvasについて : https://kuroro.blog/python/ANyM9WLpd0LSXRQAELOj/ 34cv.create_image(0, 0, image=img_tk, anchor=tki.NW) 35 36# Windowをループさせて、継続的にWindow表示させる。 37# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 38root.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/13 23:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問