我使用PIL打开了一个图像,如
image = Image.open("SomeImage.png")
在上面绘制一些文字,如
draw = ImageDraw.Draw(image)
draw.text(Some parameters here)
然后将其保存为
image.save("SomeOtherName.png")
使用pygame.image打开它
this_image = pygame.image.load("SomeOtherName.png")
我只是想在不保存的情况下这样做。这可能吗?保存然后加载需要花费大量时间(0.12秒是的,这就像我有多个需要此操作的图像一样)。可以超越保存方法吗?
答案 0 :(得分:6)
您可以使用fromstring()
中的pygame.image
功能。根据文档,以下内容应该有效:
image = Image.open("SomeImage.png")
draw = ImageDraw.Draw(image)
draw.text(Some parameters here)
mode = image.mode
size = image.size
data = image.tostring()
this_image = pygame.image.fromstring(data, size, mode)
答案 1 :(得分:2)
可悲的是,已接受的答案不再起作用,因为Image.tostring()
已被删除。它已被Image.tobytes()
取代。参见Pillow - Image
Module。
将PIL Image
转换为pygame.Surface
对象的功能:
def pilImageToSurface(pilImage):
return pygame.image.fromstring(
pilImage.tobytes(), pilImage.size, pilImage.mode).convert()
建议convert()
Surface 与显示器 Surface 具有相同的像素格式。
最小示例:
import pygame
from PIL import Image
def pilImageToSurface(pilImage):
return pygame.image.fromstring(
pilImage.tobytes(), pilImage.size, pilImage.mode).convert()
pygame.init()
window = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()
pilImage = Image.open('myimage.png')
pygameSurface = pilImageToSurface(pilImage)
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill(0)
window.blit(pygameSurface, pygameSurface.get_rect(center = (250, 250)))
pygame.display.flip()