本博客运行环境为Jupyter Notebook - Python3。
主要内容如下:
1、Image类。使用Image模块中的open函数打开一张图片,如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容。format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。如果文件不能打开,则抛出IOError异常。当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像。
2、图片转成jpg格式。
3、创建缩略图。Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。这意味着打开文件非常快,与文件大小和压缩格式无关。
4、确定图片属性。
5、裁剪、粘贴、与合并图片。Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形。1)从图片中复制子图像。2)处理子图,粘贴回原图。3)分离和合并通道。
6、几何变换。Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。1)简单几何变换。2)置换图像。3)模式转换。
7、图像增强。1)Filter。ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用。2)像素点处理。3)高级图片增强。
8、更多读取图片方法。草稿模式。draft()方法允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效(速度要求比质量高的场合)。
读写图片
使用Image模块中的open函数打开一张图片,并通过对象属性检查文件内容。我的图片命名为test.png,要注意修改为自己的图片,下列代码类似修改哈。
代码如下:
from PIL import Image
im = Image.open("test.png")
from __future__ import print_function
print(im.format, im.size, im.mode)
运行结果如下:
显示图片,代码如下:
im.show()
运行结果如下:
图片转成jpg格式
将png图片转成jpg格式。代码如下所示:
from __future__ import print_function
import os, sys
from PIL import Image
for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
Image.open("test.png").save(outfile)
except IOError:
print("cannot convert", infile)
运行结果如下:
到存储代码的同个文件夹找到这个图片哦。
创建缩略图
代码如下:
from __future__ import print_function
import os, sys
from PIL import Image
size = (128, 128)
for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + ".thumbnail"
if infile != outfile:
try:
im = Image.open("test.png")
im.thumbnail(size)
im.save(outfile,"JPEG")
except IOError:
print("cannot create thumbnail for", infile)
运行结果如下:
到存储代码的同个文件夹找到这个文件哦。
确定图片属性
代码如下:
from __future__ import print_function
import sys
from PIL import Image
for infile in sys.argv[1:]:
try:
with Image.open("test.png") as im:
print(infile, im.format, "%dx%d" % im.size, im.mode)
except IOError:
pass
运行结果如下:
可以看到图片为PNG格式,大小为893*828,RGB为真彩色。
裁剪、粘贴、与合并图片
复制某部分图片,可以自行修改需要复制的部分。
im = Image.open("test.png")
box = im.copy() #直接复制图像
box = (100, 100, 400, 400)
region = im.crop(box)
region.show()
运行结果如下:
处理子图,粘贴回原图。代码如下所示:
region = region.transpose(Image.ROTATE_180)
im.paste(region,box)
im.show()
运行结果如下:
分离和合并通道。代码如下所示:
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
im.show()
运行结果如下:
几何变换
简单几何变换。代码如下所示:
im = Image.open("test.png")
out = im.resize((128, 128))
out = im.rotate(45) # 顺时针角度表示
out.show()
运行结果如下所示:
置换图像。代码如下所示:
im = Image.open("test.png")
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
out.show()
运行结果如下:
模式转换。代码如下所示:
im = Image.open('test.png').convert('L')
im.show()
运行结果如下:
图像增强
图像增强,代码如下所示。感觉像调整了饱和度,通俗来说就是绿色叶子部分更绿了一些。
from PIL import ImageFilter
im = Image.open('test.png')
out = im.filter(ImageFilter.DETAIL)
print(out)
out.show()
运行结果如下:
<PIL.Image.Image image mode=RGB size=893x828 at 0x2D5DCE4ED88>
像素点变换。代码如下所示:
# multiply each pixel by 1.2
im = Image.open('test.png')
out = im.point(lambda i: i * 1.2)
print(out)
out.show()
运行结果如下:
高级图片增强,代码如下所示。感觉是加深的阴影部分,提亮高光部分,增强了明暗对比度。
from PIL import ImageEnhance
im = Image.open('test.png')
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")
运行结果如下:
草稿模式
更多读取方法,草稿模式,将图片转成给定模式和大小。
代码如下:
from __future__ import print_function
im = Image.open('test.png')
print("original =", im.mode, im.size)
im.draft("L", (100, 100))
print("draft =", im.mode, im.size)
运行结果如下: