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来判断验证码是否错误,下面写一段用户登录验证带验证码的. ...
随机推荐
- error: ‘ostream_iterator’ was not declared in this scope
在代码中添加 #include <iterator>
- mysqldump导出时 --set-gtid-purged=OFF
mysqldump导出表 [root@bj db10044]# rpm -qf `which mysqldump`Percona-Server-client-56-5.6.22-rel71.0.el6 ...
- Prism MVVM使用WPF的DataGrid控件
此项目源码下载地址:https://github.com/lizhiqiang0204/PrismDataGird01 运行效果如下 前端代码如下 <Window x:Class="V ...
- java课堂作业,求多参数的和
设计思想 第一步:用户输入他想要计算的数字个数 第二步:声明字符串数组,保存用户的输入,同时每次输入后强制转换类型并求和 第三步:将声明的数组赋值给args 第四步:输出结果 程序流程图 程序源代码 ...
- xgboost调参过程
from http://blog.csdn.net/han_xiaoyang/article/details/52665396
- 一些 sql 调优的总结
一.sql 优化方案 1)列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等 2)建立单列索引 3)根据需要建立多列联合索引.当单个列过滤之后还有很多数据,那么索引的效率将会 ...
- Linux基础教程 linux下cat 命令使用详解
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...
- [Usaco2007 Jan]Balanced Lineup排队
[Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1424 Des ...
- 织梦DedeCms技术资料
Dedecms调用文章发布时间的方法 11-20 样式 ([field:pubdate function='strftime("%m-%d",@me)'/]) May 15, 20 ...
- linux系统安装Oracle11g详细步骤
快速安装指引 ■Reviewing Information About This Guide■Logging In to the System as root 以root用户登录系统■Checking ...