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. ks代码助解

    代码实现: data_test_2 = {'gd':[1,1,1,1,1,1,0,0,0,0,0,0,0],'score':[1,2,0,2,2,7,4,5,4,0,4,18,np.nan]} dat ...

  2. Node.js之querystring模块

    querystring从字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析.querystring模块只提供4个方法,在我看来,这4个方法是相对应的. 这4个方法分别是querystr ...

  3. TF-epoch、 iteration和batchsize区别(转载)

    from http://www.cnblogs.com/qggg/p/6876942.html 转自 http://blog.csdn.net/sinat_30071459/article/detai ...

  4. TypeScript作为前端开发你必须学习的技能(一)

    2019年,TypeScript已经开始渐渐的崭露头角,各大框架都说要使用TypeScript,虽然现在还没有完美,但是TypeScript很有可能会成为下一个主流技术. 废话就不多说了,直接开始吧. ...

  5. 区分Overloading、Overriding及Hiding

    在面向对象(OO)的世界中存在着三个十分容易混淆的概念:重载(Overloading).重写(Overriding).隐藏(Hiding). 1.重载 重载是指同一作用域的不同函数使用相同的函数名,但 ...

  6. 9. ClustrixDB主从复制

    一.在线添加从库 主集群: 10.1.1.23:5306 从集群: 10.1.3.88:5306 主库开启binlog MySQL [(none)]> CREATE BINLOG 'clustr ...

  7. ForkJoinPool及并行流解析

    parallelStream原理. parallelStream是并行流,依赖jdk1.7出现的Fork/Join框架. Fork/Join框架的核心是工作窃取(work-stealing)算法.那么 ...

  8. python3学习笔记(二):Python初识

    一.算法 在开始认真地编程之前,首先来解释下什么是计算机程序设计.简单地说,它就是告诉计算机要做什么.计算机可以做很多事情,但是它不会自己思考,需要我们告诉它具体细节,并且使用计算机能够理解的语言把算 ...

  9. linux系统安装步骤

    在虚拟机安装OEL linux 6.5图解(64位) 一,搭建虚拟机环境 虚拟机环境建议10.0版本及以上 可以从官网上下载OELlinux的安装包,http://www.oracle.com 打开虚 ...

  10. [BZOJ1902]:[NOIP2004]虫食算(搜索)

    题目传送门 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母. 来看一个简单的例子: 43#98650#45+8468#6633=444455069 ...