Pillow/Tests/test_imagetk.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
2.7 KiB
Python
Raw Normal View History

from __future__ import annotations
2024-01-20 14:23:03 +03:00
2020-02-12 19:29:19 +03:00
import pytest
2020-09-01 20:16:46 +03:00
from PIL import Image
from .helper import assert_image_equal, hopper
try:
2019-09-26 15:12:28 +03:00
import tkinter as tk
2020-09-01 20:16:46 +03:00
from PIL import ImageTk
dir(ImageTk)
HAS_TK = True
2018-10-01 13:22:18 +03:00
except (OSError, ImportError):
2020-02-12 19:29:19 +03:00
# Skipped via pytestmark
HAS_TK = False
2017-04-20 14:14:23 +03:00
2019-06-13 18:54:46 +03:00
TK_MODES = ("1", "L", "P", "RGB", "RGBA")
2016-08-04 09:40:12 +03:00
2017-04-20 14:14:23 +03:00
2020-02-12 19:29:19 +03:00
pytestmark = pytest.mark.skipif(not HAS_TK, reason="Tk not installed")
2014-06-10 13:10:47 +04:00
2019-11-25 23:03:23 +03:00
def setup_module() -> None:
2020-02-12 19:29:19 +03:00
try:
# setup tk
tk.Frame()
# root = tk.Tk()
except RuntimeError as v:
pytest.skip(f"RuntimeError: {v}")
2020-02-12 19:29:19 +03:00
except tk.TclError as v:
pytest.skip(f"TCL Error: {v}")
2019-11-25 23:03:23 +03:00
def test_kw() -> None:
2020-02-12 19:29:19 +03:00
TEST_JPG = "Tests/images/hopper.jpg"
TEST_PNG = "Tests/images/hopper.png"
with Image.open(TEST_JPG) as im1:
with Image.open(TEST_PNG) as im2:
with open(TEST_PNG, "rb") as fp:
data = fp.read()
kw = {"file": TEST_JPG, "data": data}
2020-02-12 19:29:19 +03:00
# Test "file"
im = ImageTk._get_image_from_kw(kw)
assert im is not None
2020-02-12 19:29:19 +03:00
assert_image_equal(im, im1)
2017-04-20 14:14:23 +03:00
2020-02-12 19:29:19 +03:00
# Test "data"
im = ImageTk._get_image_from_kw(kw)
assert im is not None
2020-02-12 19:29:19 +03:00
assert_image_equal(im, im2)
2020-02-12 19:29:19 +03:00
# Test no relevant entry
im = ImageTk._get_image_from_kw(kw)
assert im is None
2022-10-03 08:57:42 +03:00
@pytest.mark.parametrize("mode", TK_MODES)
2024-01-31 13:55:32 +03:00
def test_photoimage(mode: str) -> None:
2022-10-03 08:57:42 +03:00
# test as image:
im = hopper(mode)
2017-04-20 14:14:23 +03:00
2022-10-03 08:57:42 +03:00
# this should not crash
im_tk = ImageTk.PhotoImage(im)
2017-04-20 14:14:23 +03:00
2022-10-03 08:57:42 +03:00
assert im_tk.width() == im.width
assert im_tk.height() == im.height
2022-10-03 08:57:42 +03:00
reloaded = ImageTk.getimage(im_tk)
assert_image_equal(reloaded, im.convert("RGBA"))
2024-07-02 13:10:47 +03:00
with pytest.raises(ValueError):
ImageTk.PhotoImage()
with pytest.raises(ValueError):
ImageTk.PhotoImage(mode)
2017-04-20 14:14:23 +03:00
def test_photoimage_apply_transparency() -> None:
with Image.open("Tests/images/pil123p.png") as im:
im_tk = ImageTk.PhotoImage(im)
reloaded = ImageTk.getimage(im_tk)
assert_image_equal(reloaded, im.convert("RGBA"))
2022-10-03 08:57:42 +03:00
@pytest.mark.parametrize("mode", TK_MODES)
2024-01-31 13:55:32 +03:00
def test_photoimage_blank(mode: str) -> None:
2020-02-12 19:29:19 +03:00
# test a image using mode/size:
2022-10-03 08:57:42 +03:00
im_tk = ImageTk.PhotoImage(mode, (100, 100))
2020-02-12 19:29:19 +03:00
2022-10-03 08:57:42 +03:00
assert im_tk.width() == 100
assert im_tk.height() == 100
2022-10-03 08:57:42 +03:00
im = Image.new(mode, (100, 100))
reloaded = ImageTk.getimage(im_tk)
assert_image_equal(reloaded.convert(mode), im)
2020-02-12 19:29:19 +03:00
def test_bitmapimage() -> None:
2020-02-12 19:29:19 +03:00
im = hopper("1")
# this should not crash
im_tk = ImageTk.BitmapImage(im)
assert im_tk.width() == im.width
assert im_tk.height() == im.height
# reloaded = ImageTk.getimage(im_tk)
# assert_image_equal(reloaded, im)