PIL与pygame.image
我用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 个回答
14
很遗憾,之前的答案现在不再有效,因为 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.image
里的 fromstring()
函数。根据说明,这段代码应该可以正常运行:
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)