Python Pillow – 使用图像模块
在这篇文章中,我们将看到如何在Python中使用PIL的图像模块。首先,让我们看看如何安装PIL。
安装:
Linux:在Linux终端键入以下内容。
pip install Pillow
通过终端安装pip。
sudo apt-get update
sudo apt-get install python-pip
使用图像模块工作
在这里,我们将通过图像模块提供的一些方法和属性,具体如下。
- Open Image,
- Save Image,
- 图像的大小。
- Rotate Image,
- Crop Image,
- 调整图像大小和更多。
让我们借助一些例子来逐一讨论。
1.打开图片:
为了使用PIL打开图像,我们使用open()方法。
语法: PIL.Image.open(fp, mode=’r’, formats=None)
# importing Image from PIL
from PIL import Image
# open an image
img = Image.open('gfg.png')
输出:
2.检索图像的尺寸:
为了检索图像的大小,我们将使用图像对象所提供的属性,即:Image.size属性。
语法: Image.size
from PIL import Image
with Image.open("gfg.png") as image:
width, height = image.size
print((width,height))
输出:
(200, 200)
3.保存图像中的变化
为了保存图像,我们使用Image.save()方法。
语法: Image.save(fp, format=None, **params)
参数:
- fp – 一个文件名(字符串)、pathlib.Path对象或文件对象。
- format – 可选的格式覆盖。如果省略,要使用的格式由文件名的扩展名决定。如果使用的是文件对象而不是文件名,应该总是使用这个参数。
- options – 给图像写入器的额外参数。
返回: None
from PIL import Image
img = Image.open("gfg.png")
img.save("logo.jpg")
输出:
4.图像旋转:
图像旋转需要一个角度作为参数来获得图像的旋转。
语法: Image.rotate(angle, resample=0, expand=0, center=None, translate=None, fillcolor=None)
参数:
- angle – 以逆时针方向为度。
- resample – 一个可选的重采样过滤器。
- expand – 可选的扩展标志。如果为真,扩展输出图像,使其足够大,以容纳整个旋转的图像。
- center – 可选的旋转中心(一个2元组)。原点是左上角。默认是图像的中心。
- translate – 一个可选的旋转后翻译(一个2元组)。
- fillcolor – 可选的颜色,用于旋转图像外的区域。
from PIL import Image
img = Image.open("gfg.png")
rot_img = img.rotate(180)
rot_img.save("rotated_gfg.png")
输出:
原始图片
旋转后的图片
5.裁剪图像:
Image.crop(box)接收一个四元组(左、上、右、下)像素坐标,并从所用图像中返回一个矩形区域。
语法: PIL.Image.crop(box = None)
参数:
- box – 一个4元组,定义了左、上、右和下像素坐标。
返回类型: 图像(以(左、上、右、下)元组的形式返回一个矩形区域)。
返回: 一个图像对象。
from PIL import Image
# open image and get size
img = Image.open("gfg.jpg")
width, height = img.size
# cropped image using coordinates
area = (0, 0, width/2, height/2)
crop_img = img.crop(area)
crop_img.save("cropped_image.jpg")
输出:
Cropped Image
6.调整图片的大小:
Image.resize(size)是用来调整大小的。这里的尺寸是以2元的宽度和高度提供的。
语法: Image.resize(size, resample=0)
参数:
- size – 请求的尺寸,以像素为单位,是一个2元组:(宽度,高度)。
- resample – 一个可选的重采样过滤器。这可以是PIL.Image.NEAREST(使用最近的邻居)、PIL.Image.BILINEAR(线性插值)、PIL.Image.BICUBIC(三次样条插值)或PIL.Image.LANCZOS(高质量降采样过滤器)中的一个。如果省略,或者图像有模式 “1 “或 “P”,则设置为PIL.Image.NEAREST。
返回类型: 一个图像对象。
from PIL import Image
img = Image.open("gfg.png")
width, height = img.size
#resizing the image
img = img.resize((width//2, height//2))
img.save("resized_picture.png")
输出:
Resized Image
7.将一个图像粘贴到另一个图像上:
第二个参数可以是一个2元组(指定左上角),也可以是一个4元组(左、上、右、下)–在这种情况下,粘贴的图像的大小必须与这个方框区域的大小相匹配,或者无,相当于(0,0)。
语法:
PIL.Image.Image.paste(image_1, image_2, box=None, mask=None)
或者
image_object.paste(image_2, box=None, mask=None)
参数:
- image_1/image_object : 它是要粘贴其他图像的图像。
- image_2 : 源图像或像素值(整数或元组)。
- box : 一个可选的4元组,给出要粘贴的区域。如果使用一个2元组,它将被视为左上角。如果省略或没有,源文件将被粘贴到左上角。
- mask : 一个可选的遮罩图像。
如果一个图像被作为第二个参数给出,而没有第三个参数,则盒子默认为(0,0),第二个参数被解释为一个掩码图像。
from PIL import Image
img1 = Image.open("gfg.jpg")
#pasting img2 on img1
img2 = Image.open("gfg.png")
img1.paste(img2, (50, 50))
img1.save("pasted_picture.jpg")
输出:
8.转换图像:
这个功能给了我们一个图像的镜像
语法: Transpose image (flip or rotate in 90 degree steps)
参数:
- method – PIL.Image.FLIP_LEFT_RIGHT、PIL.Image.FLIP_TOP_BOTTOM、PIL.Image.ROTATE_90、PIL.Image.ROTATE_180、PIL.Image.ROTATE_270或PIL.Image.TRANSPOSE其中之一。
返回类型: 图像对象。
from PIL import Image
img = Image.open("gfg.png")
#flipping the image by 180 degree horizontally
transposed_img = img.transpose(Image.FLIP_LEFT_RIGHT)
transposed_img.save("transposed.png")
输出:
原始图像
转置的图像
9.创建缩略图:
这个方法创建一个被打开的图像的缩略图。它并不返回一个新的图像对象,而是对当前打开的图像对象本身进行原地修改。如果你不想改变原始图像对象,可以创建一个副本,然后应用这个方法。这个方法也会根据所传递的尺寸来评估是否合适,以保持图像的长宽比。
语法: Image.thumbnail(size, resample=3)
参数:
- size – 要求的尺寸。
- resample – 可选的重采样过滤器。
返回类型: 图像对象.
from PIL import Image
img = Image.open("gfg.png")
img.thumbnail((200, 200))
img.save("thumb.png")
输出:
200 x 200像素的缩略图