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 сек. Да, это больше, так как у меня есть несколько изображений, которые требуют этой операции). Можно ли превзойти этот метод сохранения?

1 ответ

Решение

Вы могли бы использовать 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)

К сожалению, принятый ответ больше не работает, потому что Image.tostring()был удален. Он был заменен на Image.tobytes(). См. Подушку - ImageМодуль.

Функция для преобразования PIL Image к pygame.Surface объект:

def pilImageToSurface(pilImage):
    return pygame.image.fromstring(
        pilImage.tobytes(), pilImage.size, pilImage.mode).convert()

Рекомендуется convert()поверхности, чтобы иметь один и тот же формат пикселя в качестве дисплея поверхности.


Минимальный пример:

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()
Другие вопросы по тегам