PIL实现图片框架以及生成图片验证码
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实现图片框架以及生成图片验证码的更多相关文章
- 【转载】Asp.Net生成图片验证码工具类
在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一 ...
- python PIL图像处理-生成图片验证码
生成效果如图: 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random # 打开一个jpg图像文件: im = I ...
- python 全栈开发,Day85(Git补充,随机生成图片验证码)
昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...
- Django登录(含随机生成图片验证码)注册实例
登录,生成随机图片验证码 一.登录 - 随机生成图片验证码 1.随机生成验证码 Python随机生成图片验证码,需要使用PIL模块,安装方式如下: pip3 install pillow 1)创建图片 ...
- CodeIgniter(CI)框架中的验证码
在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...
- PHP生成图片验证码demo【OOP面向对象版本】
下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...
- net生成图片验证码--转自Lisliefor
目前,机器识别验证码已经相当强大了,比较常见的避免被机器识别的方法,就是将验证码的字符串连到一起,这样就加大的识别的难度,毕竟机器没有人工智能.我找了很多的.net生成图片验证码的例子,后来经过一些修 ...
- 在.net core web项目中生成图片验证码
第1步:添加SkiaSharp包引用 Install-Package SkiaSharp 第2步:编写生成图片验证码的代码 using SkiaSharp; //在类文件头部添加引用 public I ...
- web框架--tornado之验证码实例
tornado随机生成图片验证码 用python生成随机验证码需要借鉴一个插件,和一个io模块,实现起来也非常容易,当然也需要借鉴session来判断验证码是否错误,下面写一段用户登录验证带验证码的. ...
随机推荐
- chrome获取页面element的xPath
chrome真的是强大的工具 1.在chrome打开的页面点击F12,进入开发者模式 2.点击弹出的开发者工具左上角的跟踪箭头,再点击需要跟踪的页面元素,html程序定位到元素在程序中位置 3.选中的 ...
- 【NOIP2016提高A组集训第1场10.29】完美标号
题目 给定M个二元组(A_i, B_i),求X_1, ..., X_N满足:对于任意(A_i, B_i),有|X_{A_i} - X_{B_i}| = 1成立. 分析 显然,对于二元组(x,y),X_ ...
- mysql AUTO INCREMENT字段 语法
mysql AUTO INCREMENT字段 语法 作用:在新记录插入表中时生成一个唯一的数字 说明:我们通常希望在每次插入新记录时,自动地创建主键字段的值.我们可以在表中创建一个 auto-incr ...
- XML 验证
拥有正确语法的 XML 被称为“形式良好”的 XML. 通过 DTD 验证的 XML 是“合法”的 XML. 形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形 ...
- CodeForces 1100F Ivan and Burgers
CodeForces题面 Time limit 3000 ms Memory limit 262144 kB Source Codeforces Round #532 (Div. 2) Tags da ...
- (63)通信协议之一json
1.什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...
- Spring Cloud架构教程 (三)服务网关(基础)
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...
- FP回写阶段卡住或报错
FP在autosap阶段往往会因各种各样的因素导致回写报错,卡住等异常: 本次由于一个视图的性能突然下降导致回写长期卡住没有完成: 这时如果要重新执行回写的话就要检查哪部分的数据回写到SAP端,一般有 ...
- es之分页
导入测试数据: POST /_bulk{ "create": { "_index": "us", "_type": &q ...
- Mongodb分片副本集集群搭建
一.环境准备 1.1.主机信息(机器配置要求见硬件及开发标准规范文档V1.0) 序号 主机名 IP 1 DB_01 10.202.105.52 2 DB_02 10.202.105.53 3 DB_0 ...