Pygame 转换图像
pygame.ransform 模块包含了一些函数的定义,用于操作从图像或文本块中得到的表面对象。对一个表面的操作包括翻转、旋转、缩放、调整大小和放大对象。
以下是 pygame.transform 模块中的函数。
flip() | 垂直和水平方向的翻转 |
---|---|
scale() | 调整大小到新的分辨率 |
rotate() | 旋转一个图像 |
rotozoom() | 缩放和旋转的过滤 |
scale2x() | 专门的图像倍增器 |
smoothscale() | 将一个曲面平滑地扩展到一个任意的尺寸 |
get_smoothscale_backend() | 返回正在使用的smoothscale过滤器的版本 – ‘GENERIC’, ‘MMX’, or ‘SSE’ 。 |
set_smoothscale_backend() | 设置平滑尺度过滤器的版本为 – ‘GENERIC’, ‘MMX’, 或 ‘SSE’之一。 |
chop() | 获取一个去除内部区域的图像的副本 |
laplacian() | 查找曲面中的边缘 |
average_surfaces() | 从许多表面中找出平均的表面。 |
Average_color() | 找出一个曲面的平均颜色 |
threshold() | 找出一个曲面中哪些像素在 “search_color “或 “search_surf “的阈值范围内,以及有多少像素在阈值范围内。 |
让我们首先使用flip()函数,其语法如下:
flip(Surface, xbool, ybool)
这个函数可以水平、垂直或同时翻转曲面对象。方向是由两个bool参数决定的。
要水平翻转图像,请使用以下命令:
pygame.transform.flip(img2,True, False)
要垂直翻转,请使用以下命令—
pygame.transform.flip(img2,False, True)
在下面的例子中,pygame标志图像正常显示,并在两个方向上翻转。首先从原始图像对象中获得翻转的表面,获取其Rect对象,然后建立它。要渲染水平翻转的图像。
img1 = pygame.image.load('pygame.png')
img2=img1
img2=pygame.transform.flip(img2,True, False)
#inside event loop
rect2 = img2.get_rect()
rect2.center = 200, 150
screen.blit(img2, rect2)
例子
渲染原始Pygame标识及其翻转图像的完整代码如下
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Flip image")
img1 = pygame.image.load('pygame.png')
img2=img1
img3=img1
img2=pygame.transform.flip(img2,True, False)
img3=pygame.transform.flip(img3, False, True)
done = False
bg = (127,127,127)
while not done:
for event in pygame.event.get():
screen.fill(bg)
rect1 = img1.get_rect()
rect1.center = 200, 50
screen.blit(img1, rect1)
rect2 = img2.get_rect()
rect2.center = 200, 150
screen.blit(img2, rect2)
rect3 = img3.get_rect()
rect3.center = 200, 250
screen.blit(img3, rect3)
if event.type == pygame.QUIT:
done = True
pygame.display.update()
输出
rotate()函数需要下列参数 –
rotate(Surface, angle)
例子
角度的负值使曲面向顺时针方向旋转。
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("rotate image")
img1 = pygame.image.load('pygame.png')
img2=img1
img3=img1
img2=pygame.transform.rotate(img2,90)
img3=pygame.transform.rotate(img3, -90)
done = False
bg = (127,127,127)
while not done:
for event in pygame.event.get():
screen.fill(bg)
rect1 = img1.get_rect()
rect1.center = 200, 50
screen.blit(img1, rect1)
rect2 = img2.get_rect()
rect2.center = 100, 200
screen.blit(img2, rect2)
rect3 = img3.get_rect()
rect3.center = 300,200
screen.blit(img3, rect3)
if event.type == pygame.QUIT:
done = True
pygame.display.update()
输出
例子
laplacian()函数提取了表面对象的轮廓。该函数只需要一个参数,即图像对象本身。
import pygame
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Laplacian of image")
img1 = pygame.image.load('pygame.png')
img2=img1
img2=pygame.transform.laplacian(img2)
done = False
bg = (127,127,127)
while not done:
for event in pygame.event.get():
screen.fill(bg)
rect1 = img1.get_rect()
rect1.center = 200, 50
screen.blit(img1, rect1)
rect2 = img2.get_rect()
rect2.center = 200, 200
screen.blit(img2, rect2)
if event.type == pygame.QUIT:
done = True
pygame.display.update()
输出
为了使Surface对象随着鼠标的移动而移动,要计算从图像中心开始的x、y坐标。atan2(y, x)数学函数可以找到旋转角度。我们需要将弧度转换为度。从鼠标中心的距离我们计算出比例参数。
mouse = event.pos
Pygame
54
x = mouse[0] - 200
y = mouse[1] - 150
d = math.sqrt(x ** 2 + y ** 2)
angle = math.degrees(-math.atan2(y, x))
scale = abs(5 * d / 400)
最后,我们使用rotzoom()函数,该函数执行组合旋转和缩放变换。
rotozoom(Surface, angle, scale)
例子
下面的代码显示了Pygame的标志图像,它可以根据鼠标的移动而旋转。
import pygame , math
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((400, 300))
pygame.display.set_caption("Move image with mouse")
img1 = pygame.image.load('pygame.png')
done = False
bg = (127,127,127)
while not done:
for event in pygame.event.get():
screen.fill(bg)
if event.type == pygame.QUIT:
done = True
if event.type == MOUSEMOTION:
mouse = event.pos
x = mouse[0] - 200
y = mouse[1] - 150
d = math.sqrt(x ** 2 + y ** 2)
angle = math.degrees(-math.atan2(y, x))
scale = abs(5 * d / 400)
img2 = pygame.transform.rotozoom(img1, angle, scale)
rect = img2.get_rect()
rect.center = (200,150)
screen.blit(img2, rect)
pygame.display.update()
输出
运行上述代码,尝试沿着显示窗口移动鼠标指针。图像将旋转并相应地缩小或增大。