PIL 是 Python Imaging Library 的缩写。 PIL 是一个用于在 Python 中处理图像的库。它提供了一系列的模块和方法,如裁剪、平移、旋转、调整大小等。它已经是 Python 平台事实上的图像处理标准库。 PIL 非常强大,但是 API 非常简单易用。
PIL有以下模块:Image Module, ImageChops Module, ImageCrackCode Module, ImageDraw Module, ImageEnhance Module, ImageFile Module, ImageFileIO Module, ImageFilter Module, ImageFont Module, ImageGrab Module, ImageOps Module, ImagePath Module, ImageSequence Module, ImageStat Module, ImageTk module ,ImageWin模块,PSDraw模块。
在 PIL 库中,任何图像都由一个 Image 对象表示,因此要加载图像,最简单的形式如下:
from PIL import Image
image = Image.open("1.jpeg")
在PIL库中,最常用的模块有Image,ImageDraw,ImageEnhance,ImageFile等。
PIL的下载地址为:http://www.pythonware.com/products/pil/
接下来学习PIL中一些常见的操作:
1. 改变图片大小
使用resize方法可以方便的对图片进行缩放
from PIL import Image
image = Image.open("1.jpeg")
new_img = image.resize((256,256),Image.BILINEAR)
new_img.save("2.jpeg")
2. 旋转图片
rotate方法可以进行旋转操作
from PIL import Image
image = Image.open("1.jpeg")
new_img = image.rotate(45)
new_img.save("2.jpeg")
3. 直线绘制
PIL库中的ImageDraw模块提供了图形绘制的基本功能,可以绘制直线、圆弧、椭圆、矩形等。
from PIL import Image,ImageDraw
image = Image.open("2.jpeg")
draw = ImageDraw.Draw(image)
width,height = image.size
draw.line(((0,0),(width-1,height-1)),fill=255)
draw.line(((0,height-1),(width-1,0)),fill=255)
image.save("2.jpeg")
4. 绘制圆
from PIL import Image,ImageDraw
image = Image.open("2.jpeg")
draw = ImageDraw.Draw(image)
width,height = image.size
draw.arc((0,0,width-1,height-1),0,360,fill=255)
image.save("2.jpeg")
5. 中文验证码实例
下面我们来学习如何使用Python生成中文验证码。其实这个问题很简单,我们都知道验证码一般是用来防止网络机器的
人们用来破解密码的登录尝试次数,那么我们需要为这张图片随机生成汉字来验证,一般来说图片的单词表会是
它非常模糊,有效地阻止了机器人识别它。所以除了随机生成汉字外,我们还需要添加一些干扰线等等。
# -*- coding: utf-8 -*-
from PIL import Image,ImageDraw,ImageFont
import random
import math, string
class RandomChar():
@staticmethod
def Unicode():
val = random.randint(0x4E00, 0x9FBF)
return unichr(val)
@staticmethod
def GB2312():
head = random.randint(0xB0, 0xCF)
body = random.randint(0xA, 0xF)
tail = random.randint(0, 0xF)
val = ( head << 8 ) | (body << 4) | tail
str = "%x" % val
return str.decode('hex').decode('gb2312')
class ImageChar:
def __init__(self, fontColor = (0, 0, 0),
size = (100, 40),
fontPath = 'SIMSUN.TTC',
bgColor = (255, 255, 255),
fontSize = 20):
self.size = size
self.fontPath = fontPath
self.bgColor = bgColor
self.fontSize = fontSize
self.fontColor = fontColor
self.font = ImageFont.truetype(self.fontPath, self.fontSize)
self.image = Image.new('RGB', size, bgColor)
def rotate(self):
self.image.rotate(random.randint(0, 30), expand=0)
def drawText(self, pos, txt, fill):
draw = ImageDraw.Draw(self.image)
draw.text(pos, txt, font=self.font, fill=fill)
def randRGB(self):
return (random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255))
def randPoint(self):
(width, height) = self.size
return (random.randint(0, width), random.randint(0, height))
def randLine(self, num):
draw = ImageDraw.Draw(self.image)
for i in range(0, num):
draw.line([self.randPoint(), self.randPoint()], self.randRGB())
def randChinese(self, num):
gap = 5
start = 0
for i in range(0, num):
char = RandomChar().GB2312()
x = start + self.fontSize * i + random.randint(0, gap) + gap * i
self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())
self.rotate()
self.randLine(18)
def save(self, path):
self.image.save(path)
ic = ImageChar(fontColor=(100,211, 90))
ic.randChinese(4)
ic.save("1.jpeg")
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python如何连接mongodb12/21
- ♥ 什么是 python 反向引用?11/03
- ♥ python while 循环01/07
- ♥ 什么是python新式类12/23
- ♥ python3类方法和静态方法如何选择?哪个更好?01/13
- ♥ 小白必看的Python3中_和__的用途和区别01/08
内容反馈