LINUX.ORG.RU

Как в PIL.Image вставить Tkinter.PhotoImage?

 , ,


0

1

Сбаж. Че то я уже задолбался искать;-(

Вот такой пример

from Tkinter import *
tk = Tk()
cimage = PhotoImage(file='1.ppm')
print cimage.width(), cimage.height()


import PIL.Image, PIL.ImageTk, PIL.ImageDraw, PIL.ImageFont
img = PIL.Image.new('RGB', (100,1000), (255, 255, 255)) #2png

help(img)
img.paste(im=cimage, box=(30,59,60,900)) #<<< вот тут падает

img.save('1.png')

падает со словами

  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1408, in paste
    self.im.paste(im, box)
SystemError: new style getargs format but argument is not a tuple

Изначально работа идет именно с Tkinter.PhotoImage что бы не тащить PIL в обязательные зависимости, этот код вызывается только для быстрого сохранения Tkinter.Canvas в png. Если PIL нет то юзается canvas.poscript, но это долго работает.

PS завернуть Tkinter.PhotoImage во что то PIL-овское тоже не выходит. Можно конечно сделать это через диск, но уж больно извращенно такое решение выглядит;-(

★★★★★

Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от gruy

Не важно наверное. Я сидел до сих пор на PIL, но он настолько очевидно протух что все равно буду переползать на Pillow. Кода для переноса сейчас там осталось 20 строчек, из остальных мест PIL я вычистил.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Переползай на Pillow и третий питон, что там внутри старья никто не будет разбираться. Если Pillow, то https://pillow.readthedocs.io/en/stable/reference/Image.html

Pastes another image into this image. The box argument is either a 2-tuple giving the upper left corner, a 4-tuple defining the left, upper, right, and lower pixel coordinate, or None (same as (0, 0)). See Coordinate System. If a 4-tuple is given, the size of the pasted image must match the size of the region.
А PhotoImage это враппер вокруг tk-шной библиотеки, там внутри скорее всего класс (посмотри отладчиком того же пичарма что там внутри), при том надо смотреть что там именно из питона доступно. Надо ручками его конвертировать в нужное представление, но я не вижу нормальной документации по Tkinter.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Я больше люблю физику чем программирование, так что третий питон я не хочу категорически - кодовая база здоровая, а время на это тратить не хочется. Если кто из молодежи впряжется то хорошо, а сам нет. Тем более для данного кода - там скорее от Tkinter надо уходить на что то более вменяемое.

Pillow глянул, спасибо. Я его аптом поставил и думал что он должен заместить мне PIL (во всех примерах он импортируется как PIL) - нифига. Судя по докам там действительно можно нормально сделать изображение из чего угодно. Но пока что я реализовал это в PIL через временный файл;-)

Почему ткшный канвас нельзя одним методом сохранить в png для меня полная загадка;-(

AntonI ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.