📜  如何将 PIL 图像转换为 pygame 表面图像?

📅  最后修改于: 2022-05-13 01:55:47.001000             🧑  作者: Mango

如何将 PIL 图像转换为 pygame 表面图像?

在本文中,我们将了解如何将 PIL 图像转换为 pygame 表面图像。

Pygame 表面图像:不仅具有固定分辨率和像素格式,而且在 Pygame 中表示图像的表面称为 Pygame 表面图像。

您是否正在 Pygame 中构建任何只想使用 Pygame Surface Image 作为输入的游戏?由于用户输入的大部分图片都是PIL Image格式,所以在使用之前需要将PIL图片转换成Pygame的表面图片。不知道怎么转换成Pygame Surface Image吗?别担心,这样做太容易了。您需要做的只是在将 PIL 图像作为用户输入后使用fromstring()函数。阅读下面给出的文章以了解更多详细信息。

方法:

步骤 1:首先,导入库 Image 和 Pygame。

import Image
import pygame
from pygame.locals import *

第 2 步:现在,将颜色作为您要在游戏中使用的输入。



color_1 = #RGB value of color 1
color_2 = #RGB value of color 2
color_n = #RGB value of color n

第 3 步:然后,构建 GUI 游戏。

pygame.init()

第 4 步:此外,设置 GUI 游戏的尺寸。

w, h = #width of game, #height of game
screen = pygame.display.set_mode((w, h))

第 5 步:接下来,将 PIL 图像作为您希望转换为 Pygame Surface Image 的输入。

image = Image.open("#Enter the image")

步骤 6:计算将 PIL 图像转换为 pygame 表面图像时将使用的模式值。

mode = image.mode

步骤7:进一步计算将PIL图像转换为pygame表面图像时将使用的大小值。

size = image.size

步骤 8:计算将 PIL 图像转换为 pygame 表面图像时将使用的数据值。

data = image.tobytes()

步骤 9:此外,将 PIL Image 转换为 Pygame Surface Image。

py_image = pygame.image.fromstring(data, size, mode)

步骤10:稍后,在转换后的图像周围构建矩形。



rect = py_image.get_rect()
rect.center = w//2, h//2

第十一步:设置运行游戏的运行值。

running=True

步骤12:设置您希望游戏在运行状态下执行的操作。

while running:
   for event in pygame.event.get():

步骤12.1:一旦应用程序处于运行状态,如果用户想退出,请使其退出。

if event.type == pygame.QUIT:
          running = False

步骤 12.2:此外,设置您希望在应用程序中看到的背景颜色。

screen.fill(color_1)
   screen.blit(py_image, rect)

步骤12.3:进一步构建图像周围的边框。

pygame.draw.rect(screen, color_2, rect, 2)

步骤 12.4:然后,让您的应用程序在运行状态下做您想做的事情。

步骤 12.5:完成您想做的所有事情后,更新所做的更改。

pygame.display.update()

第 13 步:最后,退出 GUI 游戏

pygame.quit()

执行:

Python
# Python image to convert PIL image
# to Pygame Surface Image
  
# Import the libraries image and pygame
import Image
import pygame
from pygame.locals import *
  
# Take colors input
YELLOW = (255, 255, 0)
BLUE = (0, 0, 255)
  
# Construct the GUI game
pygame.init()
  
# Set dimensions of game GUI
w, h = 640, 350
screen = pygame.display.set_mode((w, h))
  
# Take image as input
image = Image.open("gfg_image.jpg")
  
# Calculate mode, size and data
mode = image.mode
size = image.size
data = image.tobytes()
  
# Convert PIL image to pygame surface image
py_image = pygame.image.fromstring(data, size, mode)
  
# Construct rectangle around the image
rect = py_image.get_rect()
rect.center = w//2, h//2
  
# Set value of running variable
running=True
  
# Setting what happens when game is in running state
while running:
    for event in pygame.event.get():
        
      # Close if the user quits the game
        if event.type == QUIT:
            running = False
      
    # Set the background color
    screen.fill(YELLOW)
    screen.blit(py_image, rect)
      
    # Construct the border to the image
    pygame.draw.rect(screen, BLUE, rect, 2)
      
    # Update the GUI pygame
    pygame.display.update()
  
# Quit the GUI game
pygame.quit()


输出: