1. PIL的基本概念

PIL:即Python Imaging Library,是Python平台事实上的图像处理标准库。

PIL中涉及通道(bands)和模式(mode)这两个重要概念。

(1)通道

每张图片都是由一个或者多个数据通道构成。PIL允许在单张图片中合成相同纬度和深度的多个通道。

以RGB图像为例,每张图片都是由三个数据通道构成,分别是R、G、B通道,而对于灰度图像,则只有一个通道。

(2)模式

图像的模式定义了图像的类型和像素的位宽。当前支持如下模式:

1: 1位像素,表示黑和白,但是存储的时候每个像素存储为8bit

L: 8位像素,表示黑和白

P: 8位像素,使用调色板映射到其他模式。

RGB: 3*8位像素,为真彩色。

RGBA: 4*8位像素,有透明通道的真彩色。

CMYK: 4*8位像素,颜色分离。

YCbCr: 3*8位像素,彩色视频格式。

I: 32位整型像素

F: 32位浮点型像素

PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)

2. 图片框架实现

 from PIL import Image, ImageFilter

 img = Image.open('微微一笑很倾城.jpg')

 width, height = img.size
print(width, height)
# img = img.thumbnail(width//10, height//10) # 旋转
# img = img.rotate(45) # 通道数
bands = img.getbands()
print(bands) # 灰度化
# img = img.convert('L')
# print(img.getbands()) # 获取像素值
pixes = img.getpixel((200, 200))
print(pixes) # 滤波器,滤镜
# img = img.filter(ImageFilter.EMBOSS) # 浮雕
# img = img.filter(ImageFilter.BLUR) # 模糊,生成噪点
# img = img.filter(ImageFilter.CONTOUR) # 素描
# img = img.filter(ImageFilter.DETAIL) # 锐度 # 返回像素直方图
# 作用:表示像素值的分布情况
pr = img.histogram()
print(pr) # 图片加水印,两张图片合成
img1 = Image.open('img.png')
img.paste(img1, (200, 100)) img.show()
# jpeg是jpg的全称
img.save('test.jpg','jpeg')

3. 生成图片验证码

 from PIL import Image, ImageDraw, ImageFont
import random # 随机字母
def rand_char():
return chr(random.randint(65, 97)) # 随机颜色, 前景色
def rand_color1():
return (random.randint(64, 255),
random.randint(64, 255),
random.randint(64, 255)) # 背景色
def rand_color2():
return (random.randint(32, 127),
random.randint(32, 127),
random.randint(32, 127),) # 240*60
width = 240
height = 60
# 画板
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255)) # 创建字体对象
font = ImageFont.truetype(font='arial.ttf', size=36)
# 创建画笔Draw对象
draw = ImageDraw.Draw(image)
# 填充像素
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rand_color1()) # 写入文字
for i in range(4):
draw.text((60*i+10, 10), text=rand_char(), font=font, fill=rand_color2()) image.show()

PIL实现图片框架以及生成图片验证码的更多相关文章

  1. 【转载】Asp.Net生成图片验证码工具类

    在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一 ...

  2. python PIL图像处理-生成图片验证码

    生成效果如图: 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random # 打开一个jpg图像文件: im = I ...

  3. python 全栈开发,Day85(Git补充,随机生成图片验证码)

    昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...

  4. Django登录(含随机生成图片验证码)注册实例

    登录,生成随机图片验证码 一.登录 - 随机生成图片验证码 1.随机生成验证码 Python随机生成图片验证码,需要使用PIL模块,安装方式如下: pip3 install pillow 1)创建图片 ...

  5. CodeIgniter(CI)框架中的验证码

    在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...

  6. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  7. net生成图片验证码--转自Lisliefor

    目前,机器识别验证码已经相当强大了,比较常见的避免被机器识别的方法,就是将验证码的字符串连到一起,这样就加大的识别的难度,毕竟机器没有人工智能.我找了很多的.net生成图片验证码的例子,后来经过一些修 ...

  8. 在.net core web项目中生成图片验证码

    第1步:添加SkiaSharp包引用 Install-Package SkiaSharp 第2步:编写生成图片验证码的代码 using SkiaSharp; //在类文件头部添加引用 public I ...

  9. web框架--tornado之验证码实例

    tornado随机生成图片验证码 用python生成随机验证码需要借鉴一个插件,和一个io模块,实现起来也非常容易,当然也需要借鉴session来判断验证码是否错误,下面写一段用户登录验证带验证码的. ...

随机推荐

  1. error: ‘ostream_iterator’ was not declared in this scope

    在代码中添加      #include <iterator>

  2. mysqldump导出时 --set-gtid-purged=OFF

    mysqldump导出表 [root@bj db10044]# rpm -qf `which mysqldump`Percona-Server-client-56-5.6.22-rel71.0.el6 ...

  3. Prism MVVM使用WPF的DataGrid控件

    此项目源码下载地址:https://github.com/lizhiqiang0204/PrismDataGird01 运行效果如下 前端代码如下 <Window x:Class="V ...

  4. java课堂作业,求多参数的和

    设计思想 第一步:用户输入他想要计算的数字个数 第二步:声明字符串数组,保存用户的输入,同时每次输入后强制转换类型并求和 第三步:将声明的数组赋值给args 第四步:输出结果 程序流程图 程序源代码 ...

  5. xgboost调参过程

    from http://blog.csdn.net/han_xiaoyang/article/details/52665396

  6. 一些 sql 调优的总结

    一.sql 优化方案 1)列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等   2)建立单列索引   3)根据需要建立多列联合索引.当单个列过滤之后还有很多数据,那么索引的效率将会 ...

  7. Linux基础教程 linux下cat 命令使用详解

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...

  8. [Usaco2007 Jan]Balanced Lineup排队

    [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1424 Des ...

  9. 织梦DedeCms技术资料

    Dedecms调用文章发布时间的方法 11-20 样式 ([field:pubdate function='strftime("%m-%d",@me)'/]) May 15, 20 ...

  10. linux系统安装Oracle11g详细步骤

    快速安装指引 ■Reviewing Information About This Guide■Logging In to the System as root 以root用户登录系统■Checking ...