PIL and pygame.image
You could use the fromstring()
function from pygame.image
. The following should work, according to the documentation:
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)
Sadly the accepted answer doesn't work anymore, because Image.tostring()
has been removed. It has been replaced by Image.tobytes()
. See Pillow - Image
Module.
Function to convert a PIL Image
to a pygame.Surface
object:
def pilImageToSurface(pilImage):
return pygame.image.fromstring(
pilImage.tobytes(), pilImage.size, pilImage.mode).convert()
It is recommended to convert()
the Surface to have the same pixel format as the display Surface.
Minimal example:
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()