>>> from env_helper import info; info()
页面更新时间: 2024-04-06 23:01:28
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
3.2. 使用 Pillow 打开图像文件¶
Pillow 是 PIL 的替代版本。 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本。 新版本的名字叫Pillow,支持最新的Python 3.x,并加入了许多新特性。
PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,颜色空间转换,图像增强,直方图处理,插值和滤波等等。
安装Pillow 使用命令:
pip install pillow
可以直接安装,也可以使用 Anaconda 安装。
3.2.1. 交互查看图像¶
Image
是 Pillow 最常用的类,他可以通过多种方式创建图像实例。
导入 Image
模块。然后通过 Image
类中的 open
函数即可载入图像文件, open
函数会自动判断图片格式,
只需指定文件位置即可,open
函数返回一个 Image 对象;
载入文件失败,则会引起 IOError
异常 。
>>> from PIL import Image
注意,导入pillow模块用的是PIL,而不是pillow。
Pillow
提供 ImageColor.getcolor()
函数,所以你不必记住想用的顔色的 RGBA
值。
该函数接受一个颜色名称字符串作为第一个参数,字符串 'RGBA'
作为第二个参数, 返回一个 RGBA
元组。
要了解该函数的工作方式,就在交互式环境中输入以下代码:
>>> from PIL import ImageColor
>>> ImageColor.getcolor('red', 'RGBA')
>>>
>>> ImageColor.getcolor('RED', 'RGBA')
>>>
>>> ImageColor.getcolor('Black', 'RGBA')
>>>
>>> ImageColor.getcolor('chocolate', 'RGBA')
>>>
>>> ImageColor.getcolor('CornflowerBlue', 'RGBA')
(100, 149, 237, 255)
首先,你需要从 PIL
导入 ImageColor
模块 (不是从 Pillow
,稍后你就会明白为什么)。 传递给 ImageColor.getcolor()
的颜色名称字符串是不区分大小写的, 所以传入red
和传入 RED
将得到同样的 RGBA
元组。 还可以传递更多的不常见的颜色名称,如
chocolate
和 Cornflower Blue
。
Pillow
支持大量的颜色名称,从 aliceblue
, 至 whitesmoke
。
在 http://nostarch.com/automatestuff/
的资源中,可以找到超过100种标准颜色名称的完整列表。
>>> import matplotlib.pyplot as plt
>>> image = Image.open('L1020120.JPG')
matplotlib是一个专业绘图的库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。可以设置多个figure,设置figure的标题,更好的显示图像。
查看图像属性信息
>>> print(image.format, image.size, image.mode)
JPEG (1000, 734) RGB
format
图像格式size
图像的 (宽,高) 元组
mode
常见模式,
默认
RGB
真彩图像;L
为灰阶图像;CMYK
印刷色彩;RGBA
带透明度的真彩图像;YCbCr
彩色视频格式;LABL * a * b
颜色空间;HSV
等。
查看图片
>>> plt.imshow(image)
>>> plt.show()
3.2.2. 修改文件格式¶
Image 模块中的 save
函数可以保存图片,除非你指定文件格式,否则文件的扩展名就是文件格式。
>>> image_path='L1020120.JPG'
>>> outfile = "./xx_img2_2.png"
>>>
>>> try:
>>> Image.open(image_path).save(outfile)
>>> except IOError:
>>> print("cannot convert", image_path)
>>> image=Image.open(outfile)
>>> print(image.format, image.size, image.mode)
PNG (1000, 734) RGB
save()
函数有两个参数,如果文件名没有指定图片格式,那么第二个参数是必须的,它指定图片的格式。
3.2.3. 创建缩略图¶
创建缩略图 使用 Image.thumbnail( size )
。
>>> image_path = 'L1020120.JPG'
size
为缩略图宽长元组。我们先准备好 size
的值。为了保证图片不失真变形,当指定了图片的宽和高时,pillow会以宽度为准进行缩小。
>>> size = (256, 256)
>>> outfile = "./xx_img1_1.png"
>>>
>>> im = Image.open(image_path)
>>> print(im.mode,im.size,im.format)
RGB (1000, 734) JPEG
使用 thumbnail()
方法,将size参数传入,将图片缩小为设置的尺寸。
>>> im.thumbnail(size)
>>> im.convert('RGB')
>>> im.save(outfile)
如果上面的缩略图无法直接保存,需要进行模式的转换,不然会出现如下问题:
cannot write mode RGBA as JPEG
>>> img=Image.open(outfile)
>>> print(img.mode,img.size,img.format)
RGB (256, 188) PNG