PIL and pygame.image

前端 未结 2 464
忘掉有多难
忘掉有多难 2020-12-04 01:55

I had opened an image using PIL, as

image = Image.open(\"SomeImage.png\")

Draw some text on it, as

draw = ImageDraw.Draw(i         


        
相关标签:
2条回答
  • 2020-12-04 02:34

    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)
    
    0 讨论(0)
  • 2020-12-04 02:40

    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()
    
    0 讨论(0)
提交回复
热议问题