Image 是否有一种方法可以直接从字节创建光栅图像以用于画布(不显示)显示?
我正在“RGBX”fomat(从内存映射设备)中以字节字符串创建512x512光栅图像,无法在标签图像中显示。使用show()时,图像显示良好。我只需要快速地将字节数据直接传输到按钮或标签的图像输入,这可能吗 我已尝试使用.convert转换图像,不使用RGB,PhotoImage只需要字符串变量,base64.b64encode()会在我的机器上生成一个无法修复的僵尸。我曾在演示中尝试使图像对象“静态”,我认为大多数类似问题的答案都指向使图像保持在周围以显示。通过打开任何文件加载的图像都可以使用标签或按钮图像方法显示。io.BytesIO不支持将图像插入其中Image 是否有一种方法可以直接从字节创建光栅图像以用于画布(不显示)显示?,image,python-imaging-library,raster,Image,Python Imaging Library,Raster,我正在“RGBX”fomat(从内存映射设备)中以字节字符串创建512x512光栅图像,无法在标签图像中显示。使用show()时,图像显示良好。我只需要快速地将字节数据直接传输到按钮或标签的图像输入,这可能吗 我已尝试使用.convert转换图像,不使用RGB,PhotoImage只需要字符串变量,base64.b64encode()会在我的机器上生成一个无法修复的僵尸。我曾在演示中尝试使图像对象“静态”,我认为大多数类似问题的答案都指向使图像保持在周围以显示。通过打开任何文件加载的图像都可以使
import tkinter as tk
from PIL import Image
#import base64
root=tk.Tk()
kimage_width = 512
kimage_height = 512
kimgSize = (kimage_width,kimage_height)
# Make a color 256K pixel photo of 'stuff', in bytes
# The image data is in RGBX order
ColorImage=b''
for i in range (0,int(kimage_width * kimage_height/8)):
ColorImage+=bytes([(i>>2) & 0xFF]) # Red
ColorImage+=bytes([(i>>7) & 0xFF]) # Green
ColorImage+=bytes([(i>>6) & 0xFF]) # Blue
ColorImage+=bytes([(i>>0) & 0xFF]) # Not used
# copy it 8 times
ColorImage+=ColorImage+ColorImage+ColorImage # 4
ColorImage+=ColorImage # total = 8 copies
# make a PIL image?
kimage = Image.frombytes('RGBX', kimgSize, ColorImage, 'raw')
kimage.show() # Display image if not a tkinter window
#######photo = base64.b64encode(ColorImage) # Crash - makes a zombie
b=tk.Button(root,justify = tk.LEFT)
b.config(image=kimage, width="512", height="512")
b.pack(side=tk.LEFT)
root.mainloop()
ImageMajick在1个窗口中显示512x512彩色图像,tk窗口应将相同的图像放置在按钮图像中,但tk错误与:
_tkinter.TclError:图像“”不存在我认为您正在尝试执行此操作,但遗漏了一些位:
#!/usr/bin/env python3
import tkinter as tk
from PIL import Image, ImageTk
root=tk.Tk()
kimage_width = 512
kimage_height = 512
kimgSize = (kimage_width,kimage_height)
# Make a color 256K pixel photo of 'stuff', in bytes
# The image data is in RGBX order
ColorImage=b''
for i in range (0,int(kimage_width * kimage_height/8)):
ColorImage+=bytes([(i>>2) & 0xFF]) # Red
ColorImage+=bytes([(i>>7) & 0xFF]) # Green
ColorImage+=bytes([(i>>6) & 0xFF]) # Blue
ColorImage+=bytes([(i>>0) & 0xFF]) # Not used
# copy it 8 times
ColorImage+=ColorImage+ColorImage+ColorImage # 4
ColorImage+=ColorImage # total = 8 copies
# make a PIL image?
kimage = Image.frombytes('RGBX', kimgSize, ColorImage, 'raw').convert('RGB')
kimage.show() # Display image if not a tkinter window
pI = ImageTk.PhotoImage(kimage)
b=tk.Button(root,justify = tk.LEFT)
b.config(image=pI, width=512, height=512)
b.pack(side=tk.LEFT)
root.mainloop()
我认为您正在尝试这样做,但遗漏了几点:
#!/usr/bin/env python3
import tkinter as tk
from PIL import Image, ImageTk
root=tk.Tk()
kimage_width = 512
kimage_height = 512
kimgSize = (kimage_width,kimage_height)
# Make a color 256K pixel photo of 'stuff', in bytes
# The image data is in RGBX order
ColorImage=b''
for i in range (0,int(kimage_width * kimage_height/8)):
ColorImage+=bytes([(i>>2) & 0xFF]) # Red
ColorImage+=bytes([(i>>7) & 0xFF]) # Green
ColorImage+=bytes([(i>>6) & 0xFF]) # Blue
ColorImage+=bytes([(i>>0) & 0xFF]) # Not used
# copy it 8 times
ColorImage+=ColorImage+ColorImage+ColorImage # 4
ColorImage+=ColorImage # total = 8 copies
# make a PIL image?
kimage = Image.frombytes('RGBX', kimgSize, ColorImage, 'raw').convert('RGB')
kimage.show() # Display image if not a tkinter window
pI = ImageTk.PhotoImage(kimage)
b=tk.Button(root,justify = tk.LEFT)
b.config(image=pI, width=512, height=512)
b.pack(side=tk.LEFT)
root.mainloop()