最近需要做一个验证码的功能,在网上找了许多资料,都是一些静态的验证码图片,即都是png或jpg的图片。于是,借鉴网上的一些资料,弄一个gif的验证码图片,现分享给大家。

所需依赖如下:

pip3 install pillow
pip3 install imageio

完整代码如下:

import os
import random
from io import BytesIOimport imageio
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFontclass GifCodeImage(object):def __init__(self, width=150, height=30, code_count=4, font_size=32, point_count=20, line_count=3, frame_count=30):""":param width: 图片宽度:param height: 图片高度:param code_count: 验证码位数:param font_size: 字体大小:param point_count: 噪点数量:param line_count: 噪线数量:param frame_count: gif的帧数"""self.width = widthself.height = heightself.code_count = code_countself.font_size = font_sizeself.point_count = point_countself.line_count = line_countself.frame_count = frame_count@staticmethoddef get_random_color():"""获取一个随机颜色(r,g,b)格式的:return:"""c1 = random.randint(0, 255)c2 = random.randint(0, 255)c3 = random.randint(0, 255)return c1, c2, c3@staticmethoddef get_random_str():"""获取一个随机字符串,每个字符的颜色也是随机的:return:"""random_num = str(random.randint(0, 9))random_low_alpha = chr(random.randint(97, 122))random_upper_alpha = chr(random.randint(65, 90))random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])return random_chardef get_code_and_image(self):"""生成验证码与动画帧数:return:"""code_str_list = []for _ in range(self.code_count):s = self.get_random_str()code_str_list.append(s)bg_color = self.get_random_color()frame_list = []for item in range(self.frame_count):image = Image.new('RGB', (self.width, self.height), bg_color)draw = ImageDraw.Draw(image)path = os.path.join(os.getcwd(), "cabourgot-bold.otf")font = ImageFont.truetype(path, size=self.font_size)for i, code in enumerate(code_str_list):v = random.randint(-7, 2)x = random.randint(14, 22)draw.text((x + i * 30, v), code, self.get_random_color(), font=font)# 噪点噪线# 划线for i in range(self.line_count):x1 = random.randint(0, self.width)x2 = random.randint(0, self.width)y1 = random.randint(0, self.height)y2 = random.randint(0, self.height)draw.line((x1, y1, x2, y2), fill=self.get_random_color())# 画点for i in range(self.point_count):draw.point([random.randint(0, self.width), random.randint(0, self.height)],fill=self.get_random_color())x = random.randint(0, self.width)y = random.randint(0, self.height)draw.arc((x, y, x + 4, y + 4), 0, 90, fill=self.get_random_color())f = BytesIO()image.save(f, "png")data = f.getvalue()f.close()data = imageio.imread(data, format="png")frame_list.append(data)return frame_list, "".join(code_str_list)if __name__ == "__main__":img = GifCodeImage()frame_list, code_str = img.get_code_and_image()imageio.mimsave("code.gif", frame_list, 'GIF', duration=0.35)print(code_str)

不多说,效果如下:

Python-生成gif图片验证码相关推荐

  1. 分享一个python生成ico图片程序

    分享一个python生成ico图片程序 利用python PIL 进行ico 生成,课利用web框架扩展开发出网页版本. # -*- coding: utf-8 -*- from PIL import ...

  2. python九宫格拼图,Python生成九宫格图片

    Python生成九宫格图片 一.前言 大家在朋友圈应该看到过用一张图片以九宫格的方式显示,效果大致如下: 要实现上面的效果非常简单,我们只需要截取图片的九个区域即可.今天我们就要带大家使用Python ...

  3. Java生成随机图片验证码工具类

    一.第一种生成随机图片验证码 public class VerifyCodeUtil {//生成随机数据的数据源 public static final String VERIFY_CODES = & ...

  4. php 生成gif验证码,PHP生成Gif图片验证码

    验证码在好多地方都要用到,这里提供一个新开发的安全验证码类,支持生成Gif图片验证码(带噪点,干扰线,网格,随机色背景,随机自定义字体,倾斜,Gif动画). 先看效果图 字体及字体文件的路径需要在类中 ...

  5. Python生成内涵图片

    Python生成内涵图片 先看案例 原图 生成后(放大看看,嘿嘿嘿) 上代码: from PIL import Image, ImageDraw, ImageFontfont_size = 7 tex ...

  6. python生成字母图片_Python 模拟动态产生字母验证码图片功能

    模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...

  7. python 基于pillow模块生成随机图片验证码教程

    效果图 我们先来看一下大致的效果图. 以上图形都是用非常基础的元素随机构成的:点,线,曲线,文本.而pillow模块远远不止这些功能,如果学好了它,真的就是你想怎么花就怎么花. 那么现在我们就去学习一 ...

  8. python 生成随机图片

    python numpy生成随机图 # -*- coding: utf-8 -*-import numpy as np import cv2grayImage=np.random.randint(0, ...

  9. Python生成九宫格图片

    一.前言 大家在朋友圈应该看到过用一张图片以九宫格的方式显示,效果大致如下: 要实现上面的效果非常简单,我们只需要截取图片的九个区域即可.今天我们就要带大家使用Python来实现一下九宫格图片的生成. ...

  10. Python破解12306图片验证码

    不知从何时起,12306的登录验证码竟然变成了按字找图,可以说是又提高了一个等次,竟然把图像识别都用上了.不过有些图片,不得不说有些变态,图片的清晰图就更别说了,明显是从网络上的图库中搬过来的. 谁知 ...

最新文章

  1. python真的超过java了吗-java会被python淘汰吗?
  2. sap Status状态栏设计
  3. SQL 2005清除事务日志
  4. 荆门 php,荆门php培训
  5. 微信小程序登录 getUserInfo:fail 登录用户不是该小程序的开发者
  6. c语言中判断输入是否为数字_C 判断
  7. M-SOLUTIONS Programming Contest 2020总结
  8. Linux命令解释之cp
  9. 使用listen()和accept()函数
  10. Arcmap坐标系转换通用教程【简单明了】
  11. linux下r语言画图,linux命令行下使用R语言绘图实例讲解
  12. 四级英语图表作文真题计算机,2016年四级作文模板之图片与图表
  13. 68个dlib的landmarks
  14. word删除任意单个字符_如何从Word中的单个页面中删除页眉或页脚
  15. 真我之旅 梦想之颠 到南极之序
  16. 安全驾驶-座椅枕头高度(九)
  17. 【向 Dice Roller 应用添加图片】
  18. Charles 乱码问题解决
  19. 四十七、MySQL数据库4
  20. Amlogic android7.1 s905x hdmi相关内容浅析

热门文章

  1. php怎么给视频加水印,视频怎么加水印 添加文字水印和图片水印 给视频加水印的软件...
  2. java amr音频转码_jave: 音频转码工具,主要用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...
  3. lucky前面加a还是an_冠词a、an和the在用法上有什么不一样的地方
  4. stm32作为spi的从机使用例程
  5. python高精度乘法_洛谷P1919--A*B Problem升级版(NTT优化高精度乘法)
  6. 利用交通实时数据和社交媒体数据对飓风疏散期间的交通需求进行预测
  7. U盘内存卡数据丢失怎么恢复,这样操作也可以
  8. 国内外最顶级的12大看板工具
  9. 手机计算机dj音乐,教你如何用手机制作电子音乐
  10. SimpleFOC之ESP32(二)—— 开环控制