Как отобразить созданное миниатюрное изображение в tkinter, не сохраняя его в первую очередь? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь отобразить уменьшенное изображение в tkinter, сохранив изображение в памяти, используя io.BytesIO().Я получаю _tkinter.TclError: format error in bitmap data.BitmapImage поддерживает растровое изображение X11.Поэтому мой вопрос заключается в том, как преобразовать мои изображения в xbm, прежде чем передать его в метод BitmapImage?

from PIL import Image, ImageTk
import tkinter.scrolledtext as tkst
import tkinter as tk
import os, os.path
import io

class Example(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

    img = Image.open("1.jpg")
    image_size = 256, 256
    img.thumbnail(image_size,Image.ANTIALIAS)
    b = io.BytesIO()
    img.save(b, 'gif')
    p = b.getvalue()
    photo = tk.BitmapImage(data=p)
    self.photo = photo
    self.imageview = tk.Label(self, image = self.photo, background="black")
    self.imageview.grid(row=0, column=0, rowspan=2, sticky="nsew")

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.geometry("800x400")
    root.mainloop()

В прошлый раз я решил проблему с помощью этого кода, но иногда высота изображения будетотрезать.

    image = Image.open("1.jpg")
    basewidth = 900
    wpercent = (basewidth/float(image.size[0]))
    hsize = int((float(image.size[1])*float(wpercent)))
    image = image.resize((basewidth,hsize),Image.ANTIALIAS)
    self.photo = ImageTk.PhotoImage(image)
    self.imageview.configure(image=self.photo)
...