_tkinter.TclError: not enough free memory for image buffer

#это только часть кода в которой всё связоное с методом-ошибкой
    zoom_x=int(x*0.5)
    zoom_y=int(y*0.25)
    self.char_image = PhotoImage(file=self.Hero[i][14])
    self.char_image=self.char_image.zoom(zoom_x,zoom_y)
    self.char_canvas = Canvas(root)
    self.char_canvas.pack()
    self.char_canvas.place(relx=0.4375,rely=0.25, relheight=0.50, relwidth=0.125)
    self.char_canvas.create_image(0, 0, anchor="nw", image=self.char_image)

ошибка cылается на self.char_image.zoom(zoom_x,zoom_y) введите сюда описание изображения


Ответы (1 шт):

Автор решения: Vasya Programmist

Функция zoom увеличивает размеры x и y картинки в zoom_x и zoom_y раз соответственно, а не меняет значения x и y на zoom_x и zoom_y соответственно.

Например, у вас изображение 100x100, и, насколько я понимаю, вам нужно x уменьшить в 2 раза, а y - в 4 раза. Тогда, вам нужно писать так:

self.char_image=self.char_image.zoom(0.5, 0.25)

Иначе, изображение 100x100 увеличивается по x в 1000.5=50 раз, а по y в 1000.25=25 раз, и у вас на выходе получится изображение размерами 5000x2500 пикселей. Эти размеры и переполняют буфер.

Более того, функция zoom может работать только с целыми числами, поэтому это - не решение проблемы. Если вы хотите уменьшить размер изображения, используйте библиотеку PIL. Вот решение вашей проблемы. Здесь уже переменные означают x и y, а не коэффициенты к ним:

https://qna.habr.com/q/711103

Надеюсь, понятно объяснил.

→ Ссылка