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来判断验证码是否错误,下面写一段用户登录验证带验证码的. ...
随机推荐
- 第二章Python入门
第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Pytho ...
- 磁盘IO过高时的参考
主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大的话,是数据库,可以进行读写分离或者分库 ...
- docker容器共享宿主机环境,从而为镜像体积减负
一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的 ...
- Ubuntu下安装CUDA8.0及nvidia驱动
参考:https://blog.csdn.net/qq_35379989/article/details/80147630 cuda的历史版本下载地址:https://developer.nvidia ...
- A1006
输入n行员工id以及到达和离开的时间,输出最早到达的员工的id和最晚离开的员工的id 注:字符串赋值函数strcpy(目标字符串,原字符串)字符串之间的赋值使用该函数,需要#include<st ...
- 为什么要重写hashcode( )和equals( )?
打个比方,一个名叫张三的人去住酒店,在前台登记完名字就去了99层100号房间,此时警察来前台找叫张三的这个人住在哪间房,经过查询,该酒店住宿的有50个叫张三的,需要遍历查询,查询起来很不方便. 那么就 ...
- 实战build-react(二)-------引入Ant Design(增加)
https://blog.csdn.net/zhan_lijian/article/details/85271906(copy) 1.肯定参考facebook关于react官网咯 快速搭建 creat ...
- PID221 / 烦人的幻灯片☆ x
超详细解释!我都被我自己惊呆了! (这个题目意思我缓冲了很久!一定要读懂题!否则做不出来) 题目不懂就多读呀~ 提交你的代码 查看讨论和题解 题目描述 李教授于今天下午做一个非常重要的演讲.不幸的是他 ...
- springboot(五).如何在springboot项目中使用拦截器
在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...
- 使用 UIStoryBoard 语法糖
最后更新: 2018-09-06 当你用 UIStoryBoard (以下简称 'SB') 做iOS开发时候,总是避免不了设置 StoryBoard ID 的问题, StoryBoard ID 是一个 ...