(点击
上方蓝字
,快速关注我们)
来源:Belial_2010
blog.csdn.net/kezunhai/article/details/46446153
如有好文章投稿,请点击 → 这里了解详情
Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
1)使用 Image 类
PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。
要从文件加载图像,可以使用open( )函数,在Image模块中:
>>>
from PIL import
Image
>>>
im
=
Image
.
open
(
"E:/photoshop/1.jpg"
)
加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:
>>>
print
(
im
.
format
,
im
.
size
,
im
.
mode
)
(
'JPEG'
,
(
600
,
351
),
'RGB'
)
>>>
format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
如果文件打开错误,返回 IOError 错误。
只要你有了 Image 类的实例,你就可以通过类的方法处理图像。比如,下列方法可以显示图像:
im.show()
2)读写图像
PIL 模块支持大量图片格式。使用在 Image 模块的 open() 函数从磁盘读取文件。你不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。要保存文件,使用 Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。
加载文件,并转化为png格式:
"Python Image Library Test"
from PIL import Image
import os
import sys
for
infile
in
sys
.
argv
[
1
:
]
:
f
,
e
=
os
.
path
.
splitext
(
infile
)
outfile
=
f
+
".png"
if
infile
!=
outfile
:
try
:
Image
.
open
(
infile
).
save
(
outfile
)
except
IOError
:
print
(
"Cannot convert"
,
infile
)
save() 方法的第二个参数可以指定文件格式。
3)创建缩略图
缩略图是网络开发或图像软件预览常用的一种基本技术,使用Python的Pillow图像库可以很方便的建立缩略图,如下:
# create thumbnail
size
=
(
128
,
128
)
for
infile
in
glob
.
glob
(
"E:/photoshop/*.jpg"
)
:
f
,
ext
=
os
.
path
.
splitext
(
infile
)
img
=
Image
.
open
(
infile
)
img
.
thumbnail
(
size
,
Image
.
ANTIALIAS
)
img
.
save
(
f
+
".thumbnail"
,
"JPEG"
)
上段代码对photoshop下的jpg图像文件全部创建缩略图,并保存,glob模块是一种智能化的文件名匹配技术,在批图像处理中经常会用到。
注意:Pillow库不会直接解码或者加载图像栅格数据。当你打开一个文件,只会读取文件头信息用来确定格式,颜色模式,大小等等,文件的剩余部分不会主动处理。这意味着打开一个图像文件的操作十分快速,跟图片大小和压缩方式无关。
4)图像的剪切、粘贴与合并操作
Image 类包含的方法允许你操作图像部分选区,PIL.Image.Image.crop 方法获取图像的一个子矩形选区,如:
# crop, paste and merge
im
=
Image
.
open
(
"E:/photoshop/lena.jpg"
)
box
=
(
100
,
100
,
300
,
300
)
region
=
im
.
crop
(
box
)
矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以上诉代码复制了一个 200×200 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。
region
=
region
.
transpose
(
Image
.
ROTATE_180
)
im