Python PIL库 Image.transform()方法详解
概述
Python PIL(Python Imaging Library)是一个图像处理的Python库,提供了一些基本的图像处理功能,例如裁切、缩放、旋转等等。其中Image.transform()方法则是图片变换的方法之一。本文将深入探讨Image.transform()方法的实现机制、使用方法和示例等。
Image.transform()方法
Image.transform(method, size, data, resample=None, fill=None)
参数
- method:变换的名称。可以是字符串 “IDENTITY”、”AFFINE”、”EXTENT”、”QUAD”、”MESH”、”PERSPECTIVE” 或 “BOX” 中的一个,或者是一个数字。数字 0 代表 “IDENTITY”,数字 1 代表 “AFFINE”。
- size:输出图像的宽度和高度,必须是元组类型 (width, height)。
- data:变换数据,根据方法的不同,data 的类型也分别不同。data 是元组或列表类型,根据具体的值意义进行填充。data 的长度也随着 method 的不同而不同。
- resample:重新采样算法。可以是字符串 “NEAREST”、”BILINEAR”、”BICUBIC” 或 “ANTIALIAS” 中的一个,或者是一个数字。数字 0 代表 “NEAREST”。
- fill:输出图像的背景颜色。可以是字符串 “black”、”white” 或任何值 或者是一个元组。
使用方法
1. 变换方法: IDENTITY
from PIL import Image
im = Image.open('input.jpg')
# 变换方法: IDENTITY
out = im.transform((im.size[0], im.size[1]), Image.IDENTITY)
out.show()
这段代码会将读取到的图片变为原始大小的输出,即不对图片做任何变换。
2. 变换方法: AFFINE
from PIL import Image
im = Image.open('input.jpg')
# 变换方法: AFFINE
data = (1, 0, 0, 0, 1, 0)
out = im.transform((im.size[0], im.size[1]), Image.AFFINE, data)
out.show()
这段代码会将读取到的图片按 data
中的矩阵进行仿射变换。(例如旋转、平移、缩放等)此处 data
中的值 (1, 0, 0, 0, 1, 0)
表示不做变换。
示例
我们有一张图片,需要将其按照以下方式进行变换:宽度放大一倍,高度缩小一半,然后以 (100, 100) 为中心进行旋转 45 度。
代码如下:
from PIL import Image
im = Image.open('input.jpg')
w, h = im.size
# 创建仿射变换矩阵
scale_x, scale_y = 2, 0.5
angle = 45
center_x, center_y = w/2, h/2
M = [scale_x * math.cos(angle), -math.sin(angle), center_x,
math.sin(angle), scale_y * math.cos(angle), center_y]
# 变换方法: AFFINE
data = tuple(M)
resample = Image.NEAREST
out = im.transform((w, h), Image.AFFINE, data, resample=resample)
out.show()
这段代码先创建了一个 (2, 0.5) 的矩阵,用于对图片进行变换;然后将这个矩阵传入Image.transform()函数,完成了图片的变换。
另外一个示例:生成一个DPI为72的空图像,大小为100*100,背景颜色为白色。
from PIL import Image
# 创建空图像 Image.new(mode, size, color)
size = (100, 100)
color = (255, 255, 255)
im = Image.new(mode='RGB', size=size, color=color)
# 调整图像DPI Image.transform()
dpi = (72, 72)
out = im.transform(size, Image.EXTENT, (0, 0, 0, 0), resample=Image.NEAREST, fill='black')
out.show()
这段代码先创建了一个大小为(100, 100)的白色的空图像,然后使用Image.transform()函数将其转换为DPI为72的图像,并将背景颜色设为黑色,最后输出图片。
结语
Image.transform()方法是Python PIL库中的一个非常有用的图像变换方法,经过本文的介绍,相信读者已经能够轻松上手。如果您在使用中遇到其他问题,欢迎留言讨论,我会尽力给出帮助。