Пример #1
0
def test_write():
    image1 = teek.Image(file=SMILEY_PATH)
    with tempfile.TemporaryDirectory() as tmpdir:
        asd = os.path.join(tmpdir, 'asd.gif')
        image1.write(asd, format='gif')
        image2 = teek.Image(file=asd)
    assert slow_content_eq_check(image1, image2)
Пример #2
0
def test_images_contain_same_data_util():
    image1 = teek.Image(file=SMILEY_PATH)
    image2 = teek.Image(file=SMILEY_PATH)
    assert slow_content_eq_check(image1, image1)
    assert slow_content_eq_check(image1, image2)

    image3 = teek.Image(width=1, height=2)
    assert not slow_content_eq_check(image1, image3)
Пример #3
0
def test_read():
    image1 = teek.Image(file=SMILEY_PATH)
    assert image1.width > 0 and image1.height > 0

    image2 = teek.Image()
    assert image2.width == image2.height == 0
    image2.read(SMILEY_PATH)
    assert (image2.width, image2.height) == (image1.width, image1.height)
    assert slow_content_eq_check(image1, image2)
Пример #4
0
def test_repr():
    image = teek.Image(file=SMILEY_PATH)
    assert repr(image) == '<Image: from %s, 32x32>' % repr(SMILEY_PATH)
    image.delete()
    assert repr(image) == '<Image: from %s, deleted>' % repr(SMILEY_PATH)

    image2 = teek.Image(width=123, height=456)
    assert repr(image2) == '<Image: 123x456>'
    image2.delete()
    assert repr(image2) == '<Image: deleted>'
Пример #5
0
def test_eq_hash():
    image1 = teek.Image(file=SMILEY_PATH)
    image2 = teek.Image.from_tcl(image1.to_tcl())
    image3 = teek.Image(file=SMILEY_PATH)

    assert image1 == image2
    assert {image1: 'woot'}[image2] == 'woot'
    assert image1 != image3
    assert image2 != image3
    assert image2 != 'woot'
Пример #6
0
def test_from_to_tcl():
    image1 = teek.Image(file=SMILEY_PATH)
    teek.tcl_eval(None, 'proc returnArg {arg} {return $arg}')
    image2 = teek.tcl_call(teek.Image, 'returnArg', image1)
    assert image1.to_tcl() == image2.to_tcl()  # no implicit copying
    assert image1 is not image2  # no implicit cache
    assert slow_content_eq_check(image1, image2)
Пример #7
0
def test_transparency():
    image = teek.Image(file=SMILEY_PATH)
    x = random.randint(0, image.width - 1)
    y = random.randint(0, image.height - 1)
    assert image.transparency_get(x, y) is False
    image.transparency_set(x, y, True)
    assert image.transparency_get(x, y) is True
    image.transparency_set(x, y, False)
    assert image.transparency_get(x, y) is False
Пример #8
0
def test_get_bytes():
    image = teek.Image(file=SMILEY_PATH)

    with tempfile.TemporaryDirectory() as tmpdir:
        asd = os.path.join(tmpdir, 'asd.gif')
        image.write(asd, format='gif')
        with open(asd, 'rb') as file:
            actual_gif_bytes = file.read()

    assert image.get_bytes('gif') == actual_gif_bytes
Пример #9
0
def test_in_use():
    image = teek.Image(file=SMILEY_PATH)
    assert image.in_use() is False
    window = teek.Window()
    assert image.in_use() is False

    widget = teek.Label(window, image=image)
    assert image.in_use() is True
    widget2 = teek.Label(window, image=image)
    assert image.in_use() is True
    widget.destroy()
    assert image.in_use() is True
    widget2.destroy()
    assert image.in_use() is False
Пример #10
0
def from_pil(pil_image, **kwargs):
    """Converts a PIL_ ``Image`` object to a :class:`teek.Image`.

    All keyword arguments are passed to PIL's save_ method.

    .. _PIL: https://pillow.readthedocs.io/en/stable/
    .. _save: https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL\
.Image.Image.save
    """
    # TODO: borrow some magic code from PIL.ImageTk to make this faster?
    #       or maybe optimize teek.Image? currently it base64 encodes the data
    gif = io.BytesIO()
    pil_image.save(gif, 'gif', **kwargs)
    return teek.Image(data=gif.getvalue())
Пример #11
0
def test_iconphoto(fake_command):
    image1 = teek.Image(file=SMILEY_PATH)
    image2 = image1.copy()

    widget = teek.Toplevel()

    with fake_command('wm') as called:
        widget.iconphoto(image1)
        widget.iconphoto(image1, image2)
        assert called == [
            ['iconphoto', widget.to_tcl(),
             image1.to_tcl()],
            ['iconphoto',
             widget.to_tcl(),
             image1.to_tcl(),
             image2.to_tcl()],
        ]
Пример #12
0
def from_file(file):
    """Creates a :class:`teek.Image` from a file object.

    The file object must be readable, and it must be in bytes mode. It must
    have ``read()``, ``seek()`` and ``tell()`` methods. For example, files from
    ``open(some_path, 'rb')`` and ``io.BytesIO(some_data)`` work.

    This supports all file formats that PIL supports and SVG.

    Example::

        from teek.extras import image_loader

        with open(the_image_path, 'rb') as file:
            image = image_loader.from_file(file)
    """
    first_3_bytes = file.read(3)
    file.seek(0)
    if first_3_bytes == b'GIF':
        return teek.Image(data=file.read())

    # https://stackoverflow.com/a/15136684
    try:
        event, element = next(lxml.etree.iterparse(file, ('start', )))
        is_svg = (element.tag == '{http://www.w3.org/2000/svg}svg')
    except (lxml.etree.ParseError, StopIteration):
        is_svg = False
    file.seek(0)

    if is_svg:
        # svglib takes open file objects, even though it doesn't look like it
        # https://github.com/deeplook/svglib/issues/173
        rlg = svglib.svg2rlg(io.TextIOWrapper(file, encoding='utf-8'))

        with reportlab.graphics.renderPM.drawToPIL(rlg) as pil_image:
            return from_pil(pil_image)

    with PIL.Image.open(file) as pil_image:
        return from_pil(pil_image)
Пример #13
0
def test_from_pil():
    for lib in loader_libs:
        smiley1 = teek.Image(file=os.path.join(DATA_DIR, 'smiley.gif'))
        with PIL.Image.open(os.path.join(DATA_DIR, 'smiley.gif')) as pillu:
            smiley2 = lib.from_pil(pillu)
        assert images_equal(smiley1, smiley2)
Пример #14
0
def from_bytes(bytes_):
    return teek.Image(data=bytes_)
Пример #15
0
def test_width_and_height():
    image = teek.Image(file=SMILEY_PATH)
    assert image.width == 32
    assert image.height == 32
Пример #16
0
def from_file(file):
    return teek.Image(data=file.read())
Пример #17
0
def test_config(check_config_types):
    check_config_types(teek.Image(file=SMILEY_PATH).config, 'Image')
Пример #18
0
import os

import teek

IMAGE_PATH = os.path.join(os.path.dirname(__file__), '..', 'tests', 'data',
                          'smiley.gif')

window = teek.Window()
label = teek.Label(window,
                   image=teek.Image(file=IMAGE_PATH),
                   text="Here's a smiley:",
                   compound="bottom")
label.pack()
window.on_delete_window.connect(teek.quit)
teek.run()
Пример #19
0
def test_data_base64():
    with open(SMILEY_PATH, 'rb') as file:
        binary_data = file.read()

    assert slow_content_eq_check(teek.Image(file=SMILEY_PATH),
                                 teek.Image(data=binary_data))
Пример #20
0
def test_from_file_gif():
    for lib in loader_libs:
        smiley1 = teek.Image(file=os.path.join(DATA_DIR, 'smiley.gif'))
        for file in open_file(os.path.join(DATA_DIR, 'smiley.gif')):
            smiley2 = lib.from_file(file)
            assert images_equal(smiley1, smiley2)
Пример #21
0
def test_delete_and_all_images():
    old_images = set(teek.Image.get_all_images())
    new_image = teek.Image()
    assert set(teek.Image.get_all_images()) == old_images | {new_image}
    new_image.delete()
    assert set(teek.Image.get_all_images()) == old_images
Пример #22
0
def test_blank():
    image1 = teek.Image(file=SMILEY_PATH)
    image2 = image1.copy()
    image2.blank()
    assert not slow_content_eq_check(image1, image2)  # not slow