PIL和pygame.image是什么?

9
我使用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秒),因为我有多张图片需要进行此操作。是否可以绕过保存方法?

2个回答

12
很遗憾,接受的答案不再有效,因为Image.tostring()已被移除。取而代之的是Image.tobytes()。请参阅Pillow - Image模块
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()

10
您可以使用来自pygame.imagefromstring()函数。根据文档,以下内容应该有效:
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)

13
注意:image.tostring() 方法将不再可用,请使用 image.tobytes() 方法。 - DCA-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接