编程学习网 > 编程语言 > Python > python pygame的图形绘制和图片处理教程
2023
08-01

python pygame的图形绘制和图片处理教程

一、导入和保存图片


pygame.image模块包含加载和保存图片的功能,导入的图片实际上就是一个Surface对象,那么可以使用Surface的各种方法。image最重要的两个方法:

load(filename):打开一个图片文件

save(Surface, filename):保存Surface到文件

Pygame会自动确定图像类型,并将导入的图像创建一个Surface对象。这个对象包含和源文件相同的颜色格式、颜色键和透明度,同时建议调用Surface.convert()方法,这样可以加快在屏幕上绘制。使用convert_alpha()转换,以便让图像具有每个像素的透明度。

load函数可以打开的文件格式有:BMP、非动态的GIF、JPEG、LBM、PCX、PNG、PNM、SVG、TGA、TIFF、WEBP、XPM。常用的是其中三个粉色的图片格式,尤其是透明背景的PNG图像,在游戏中使用特别多。

save函数支持的文件格式:BMP、JPEG、PNG和TGA。

其他函数可以参考官网:

https://www.pygame.org/docs/ref/image.html

实例1:导入图片和保存图片

import pygame
import sys

pygame.init()
 
WHITE = (255, 255, 255)
size = [800, 800]
screen = pygame.display.set_mode(size)
screen.fill(WHITE)

pygame.display.set_caption("image类")
clock = pygame.time.Clock()

mokey = pygame.image.load("./resource/picture/苹果.png")
mokey_rect = mokey.get_rect()
pygame.image.save(mokey, "./resource/picture/苹果_2.bmp")

while True:
    clock.tick(10)
     
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            sys.exit(0)  

    mokey_rect.center = (400, 400)
    screen.blit(mokey, mokey_rect)

    pygame.display.flip()

pygame.quit()
效果:


二、绘制图形

pygame.draw模块是用于绘制简单的几何图形,这些绘制函数有以下特征:

大部分函数都包含width参数来描述画笔的粗细,0表示填充图形

所有的几何图形都被一个矩形区域包住,会返回一个Rect对象

全部函数都接受一个color(颜色)参数,可以是

pygame.Color对象

RBG三元组或RGBA四元组

一个映射到surface像素格式的整数,pygame.Surface.map_rgb()

第一个参数都是Surface,用于指定图形绘制的位置

下面列出这些函数:

(1)绘制矩形

rect(surface,  # 绘制图形的画布
     color,    # 图形颜色
     rect,     # Rect对象
     width=0,  # 画笔粗细,默认填充
     border_radius=0, # 圆角矩形半径。范围[0,长边/2],0表示不绘制圆角矩形
     border_top_left_radius=-1,  # 设置左上边框的值,默认是border_radius
     border_top_right_radius=-1, # 设置右上角边框的值 
     border_bottom_left_radius=-1,  # 设置左下边框的值
     border_bottom_right_radius=-1) # 设置右下边框的值


(2)绘制多边形

polygon(surface, 
        color, 
        points, # 多个点的列表,例如[(x1,y1), (x2,y2), (x3,y3)]
        width=0)


(3)绘制圆

circle(surface, 
       color, 
       center,  # 圆心。(x1, y1)或[x1, y1]或pygame.math.Vector2对象
       radius,  # 半径。必须大于1
       width=0, 
       draw_top_right=None, # True:绘制圆的右上角
       draw_top_left=None,  # True:绘制圆的左上角
       draw_bottom_left=None,  # True:绘制圆的左下角
       draw_bottom_right=None) # True:绘制圆的右下角

(4)绘制扇形或弧

arc(surface, 
    color, 
    rect,         # Rect对象
    start_angle,  # 弧的起始角度(单位:弧度)
    stop_angle,   # 弧的终止角度(单位:弧度)
    width=1)


(5)绘制椭圆

ellipse(surface, 
        color, 
        rect,  # Rect对象
        width=0)


(6)绘制线

# 单线
line(surface, 
     color, 
     start_pos,  # 直线的起始点
     end_pos,    # 直线的终止点
     width=1)
# 多条线
lines(surface, 
      color, 
      closed,    # 是否封闭图形
      points,    # 想多边形那样的多个点集合
      width=1)
# 抗锯齿线
aaline(surface, 
       color, 
       start_pos, # 直线的起始点
       end_pos,   # 直线的终止点
       blend=1)
# 多条抗锯齿线       
aalines(surface, 
        color, 
        closed,  # 是否封闭图形
        points,  # 想多边形那样的多个点集合
        blend=1)   


实例2:绘制图形

# 06-绘制图形.py
import pygame.math
import pygame
import sys
from math import pi

 
pygame.init()
 
BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
BLUE =  (  0,   0, 255)
GREEN = (  0, 255,   0)
RED =   (255,   0,   0)
 
size = [800, 800]
screen = pygame.display.set_mode(size)
screen.fill(WHITE)

pygame.display.set_caption(__name__)
clock = pygame.time.Clock()
 
while True:
    clock.tick(10)
     
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            sys.exit(0)  

    # 从(0, 0)到(50, 50)画线,粗细为5
    pygame.draw.line(screen, GREEN, [0, 0], [50, 50], 5) 
    # 画多条线
    pygame.draw.lines(screen, BLACK, False, [[0, 80], [50, 90], [200, 80], [220, 30]], 5)
    # 无锯齿的线
    pygame.draw.aaline(screen, GREEN, [0, 50],[700, 700], True)
    # 画无锯齿的线
    pygame.draw.lines(screen, BLACK, True, [[0, 790], [500, 790], [200, 600], [700, 300]], 5)


    # 画矩形
    pygame.draw.rect(screen, BLACK, [75, 10, 50, 20], 2)
     
    # 填充矩形
    pygame.draw.rect(screen, BLACK, [150, 10, 50, 20])

    # 圆角矩形
    pygame.draw.rect(screen, GREEN, [400, 400,200, 100], 10, border_radius=15)
    pygame.draw.rect(screen, RED, [600, 600, 100, 100], 0, border_radius=10, border_top_left_radius=0,
                     border_bottom_right_radius=15)

    # 椭圆
    pygame.draw.ellipse(screen, RED, [225, 10, 100, 50], 2) 

    # 椭圆
    pygame.draw.ellipse(screen, RED, [400, 10, 50, 90]) 
 
    # 多边形,这里画三角形
    pygame.draw.polygon(screen, BLACK, [[100, 100], [0, 200], [200, 200]], 5)
  
    # 画弧
    pygame.draw.arc(screen, BLACK,[210, 75, 150, 125], 0, pi/2, 2)
    pygame.draw.arc(screen, GREEN,[210, 75, 150, 125], pi/2, pi, 2)
    pygame.draw.arc(screen, BLUE, [210, 75, 150, 125], pi,3*pi/2, 2)
    pygame.draw.arc(screen, RED,  [210, 75, 150, 125], 3*pi/2, 2*pi, 2)
    
    # 画圆
    pygame.draw.circle(screen, BLUE, [500, 250], 45, 5)
    pygame.draw.circle(screen, GREEN, [500, 250], 40, 30)

    # 画圆的1/4
    pygame.draw.circle(screen, BLUE, [350, 350], 100, 0, draw_top_right=True)
    pygame.draw.circle(screen, RED,  [350, 350], 100, 30, draw_top_left=True)
    pygame.draw.circle(screen, GREEN, [350, 350], 100, 20, draw_bottom_left=True)
    pygame.draw.circle(screen, BLACK, [350, 350], 100, 10, draw_bottom_right=True)

    pygame.display.flip()

pygame.quit()
效果:

以上就是python pygame的图形绘制和图片处理教程的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取