I had opened an image using PIL, as
image = Image.open("SomeImage.png")
Draw some text on it, as
draw = ImageDraw.Draw(image)
draw.text(Some parameters here)
and then saved it as
image.save("SomeOtherName.png")
to open it using pygame.image
this_image = pygame.image.load("SomeOtherName.png")
I just want to do it without saving.. Can that be possible? It is taking a lot of time to save and then load(0.12 sec Yes, that is more as I have multiple images which require this operation). Can that save method be surpassed?
Python Imaging Library (PIL) PIL is an additional, free, open-source library for the Python programming language that provides support for opening, manipulating, and saving many different image file formats.
Python – Display Image using PIL To show or display an image in Python Pillow, you can use show() method on an image object. The show() method writes the image to a temporary file and then triggers the default program to display that image. Once the program execution is completed, the temporary file will be deleted.
Step 1: First, import the libraries Image and Pygame. Step 2: Now, take the colors as input that you want to use in the game. Step 3: Then, construct the GUI game. Step 4: Further, set the dimensions of your GUI game.
Pygame is able to load images onto Surface objects from PNG, JPG, GIF, and BMP image files. The differences between these image file formats is described at http://invpy.com/formats.
When you have to use both PIL and Pygame because missing functionalities in both of them, you need a way to convert between Pygame Surfaces and PIL Images, preferably without writing them to the disk. For that you can use "tostring" and "fromstring" functions provided in both libraries. Conversion from PIL to Pygame:
Show the display surface object on the pygame window using display.update () method of pygame. Now, let’s see the code displaying image using pygame : # activate the pygame library . # to use pygame's functionality. # of specific dimension..e (X, Y). # create a surface object, image is drawn on it. # (0, 0) coordinate.
Pygame Surface Image: A surface that not only has fixed resolution and pixel format but also represents the image in Pygame is known as Pygame Surface Image.
The pygame.transform module provides methods for scaling, rotating and flipping images. As we are going to modify the image img we keep the original image in a variable called img0: img0 = pygame.image.load(path) img0.convert() In order to show the image rectangle, we add a green border to the original image:
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()
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With