Python高级编程之pillow图像处理
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
由于PIL仅支持到Python 2.7,一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性
安装Pillow
需要在命令行下通过pip安装:
$ sudo pip install pillow
来看看最常见的将图像缩小一半操作,只需三四行代码:
#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python
from PIL import Image
import crash_ipy
import os
# 当前路径是:/Users/beyond
print os.getcwd()
img = Image.open("./sg_python/sora.jpg")
imgWidth,imgHeight = img.size
print "origin W:%d and H:%d" % (imgWidth,imgHeight)
#缩小到一半,注意:参数是个元组
#// 取整除 - 返回商的整数部分
img.thumbnail((imgWidth//2,imgHeight//2))
#保存
img.save("./sg_python/sora_half.jpg","jpeg")
其他功能如模糊效果也只需几行代码:
#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python
from PIL import Image
from PIL import ImageFilter
import crash_ipy
import os
# 当前路径是:/Users/beyond
print os.getcwd()
img = Image.open("./sg_python/sora.jpg")
#模糊半径不能调节吗???
img_blur = img.filter(ImageFilter.BLUR)
#保存
img_blur.save("./sg_python/sora_blur.jpg","jpeg")
PIL的
ImageDraw
提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片,代码只要仅仅几行:
#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python
import ipython_debug
#生成二维码
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
#生成随机数
def randomChar():
randomInt = random.randint(65,90)
return chr(randomInt)
#生成随机浅和深颜色
def randomWhiteColor():
return (random.randint(125,255),random.randint(125,255),random.randint(125,255))
def randomBlackColor():
return (random.randint(0,125),random.randint(0,125),random.randint(0,125))
#生成4个字符验证码
charNumbers = 4
canvasWidth = charNumbers * 60
canvasHeight = 60
img = Image.new('RGB',(canvasWidth,canvasHeight),(255,255,255))
#文字
fnt = ImageFont.truetype('/Library/Fonts/Arial.ttf',36)
#一张素洁的画布
canvas = ImageDraw.Draw(img)
#将画布的每个点上色
for x in range(canvasWidth):
for y in range(canvasHeight):
canvas.point((x,y),fill = randomWhiteColor())
#在画布上绘制文字
codeStr = ''
for posIndex in range(charNumbers):
tmpChar = randomChar()
codeStr = codeStr+tmpChar
canvas.text((10+posIndex*60,10),tmpChar,font = fnt,fill = randomBlackColor())
#模糊
img = img.filter(ImageFilter.BLUR)
#创建文件
targetFilePath = '/Users/beyond/sg_python/randomchar_'+codeStr+'.jpg'
img.save(targetFilePath,'jpeg')
果图如下:
要详细了解PIL的强大功能,请请参考Pillow官方文档:
https://pillow.readthedocs.org/
小结
PIL提供了操作图像的强大功能,可以通过简单的代码完成复杂的图像处理。