python之滑动认证(图片)
from PIL import Image, ImageEnhance
from io import BytesIO def cutImg(imgsrc):
"""
根据坐标位置剪切图片
:param imgsrc: 原始图片路径(str)
:param out_img_name: 剪切输出图片路径(str)
:param coordinate: 原始图片上的坐标(tuple) egg:(x, y, w, h) ---> x,y为矩形左上角坐标, w,h为右下角坐标
:return: from PIL import Image
from PIL import ImageEnhance
#原始图像
image = Image.open('lena.jpg')
image.show()
#亮度增强
enh_bri = ImageEnhance.Brightness(image)
brightness = 1.5
image_brightened = enh_bri.enhance(brightness)
image_brightened.show()
#色度增强
enh_col = ImageEnhance.Color(image)
color = 1.5
image_colored = enh_col.enhance(color)
image_colored.show()
#对比度增强
enh_con = ImageEnhance.Contrast(image)
contrast = 1.5
image_contrasted = enh_con.enhance(contrast)
image_contrasted.show()
#锐度增强
enh_sha = ImageEnhance.Sharpness(image)
sharpness = 3.0
image_sharped = enh_sha.enhance(sharpness)
image_sharped.show() """ # image.save(buffered, format="PNG")
# img_str = base64.b64encode(buffered.getvalue()) x=random.randint(100,260)
y=random.randint(0,80)
w=x+40
h=y+40
coordinate=(x,y,w,h) image = Image.open(imgsrc)
region = image.crop(coordinate)
region = ImageEnhance.Contrast(region).enhance(1.0)
# region2 = ImageEnhance.Contrast(region).enhance(0.1)
region2 = ImageEnhance.Brightness(region).enhance(0.5)
region2.show()
buffered = BytesIO()
region.save(buffered, format="PNG")
img_paste = base64.b64encode(buffered.getvalue()).decode()
buffered.close() image.paste(region2, (x, y))
buffered2 = BytesIO()
image.save(buffered2, format="PNG")
img_bg=base64.b64encode(buffered2.getvalue()).decode()
buffered2.close()
封装成方法
import os
from PIL import Image, ImageEnhance
from io import BytesIO
import base64
import random
import uuid def isint(self, *args):
for nb in args:
try:
int(nb)
except Exception as e:
return (False, nb)
return (True, '') # redis key值开头
prefix_str = "phoebe_auth_" imgpath = os.path.join(os.path.dirname(__file__), '..', 'silder_img') #获取滑动认证的图片
def getAuthImage(redis_conn,uid):
if os.path.isdir(imgpath) is False:
return (False,'{} 不存在'.format(imgpath)) img_list = os.listdir(imgpath)
if img_list:
random_img = img_list[random.randint(0, len(img_list) - 1)]
imgscr = os.path.join(imgpath, random_img)
else:
return (False, '{} 不存在'.format(imgpath)) image = Image.open(imgscr)
width = image.size[0]
height = image.size[1]
if width != 300 or height != 110:
return (False,'图片尺寸:300/110'.format(imgscr))
x = random.randint(100, 260)
y = random.randint(0, 70)
w = x + 40
h = y + 40
coordinate = (x, y, w, h) region = image.crop(coordinate)
region = ImageEnhance.Contrast(region).enhance(1.0)
# region2 = ImageEnhance.Contrast(region).enhance(0.1)
region2 = ImageEnhance.Brightness(region).enhance(0.5)
buffered = BytesIO()
region.save(buffered, format="PNG")
img_paste = base64.b64encode(buffered.getvalue()).decode()
buffered.close() image.paste(region2, (x, y))
buffered2 = BytesIO()
image.save(buffered2, format="PNG")
img_bg = base64.b64encode(buffered2.getvalue()).decode()
buffered2.close() redis = redis_conn # 背景图片
redis.set("%s_%s_bg_img" % (prefix_str, uid), img_bg, 30)
# 可移动图片
redis.set("%s_%s_move_img" % (prefix_str, uid), img_paste, 30)
# 可移动图片x,y坐标
redis.set("%s_%s_move_xy" % (prefix_str, uid), '%s,%s' % (x, y), 30)
# 认证失败次数
redis.set("%s_%s_img_error_count" % (prefix_str, uid), 0, 30) data = {
'bg_img': img_bg,
'move_img': img_paste,
'move_y': y
}
return (True,data) #认证图片是否移动到指定位置
def AuthImage(redis_conn, uid,move_x,move_y):
isint_ret = isint(move_x, move_y)
if isint_ret[0] is False:
describe = 'The "%s" data type is int' % (isint_ret[1])
return (False,describe) # 获取x,y坐标
redis=redis_conn r_xy = redis.get("%s_%s_move_xy" % (prefix_str, uid))
if r_xy:
r_xy_list = r_xy.decode().split(',')
r_x = r_xy_list[0]
r_y = r_xy_list[1]
if abs(int(r_x) - int(move_x)) <= 1 and abs(int(r_y) - int(move_y)) <= 1:
redis.delete("%s_%s_bg_img" % (prefix_str, uid))
redis.delete("%s_%s_move_img" % (prefix_str, uid))
redis.delete("%s_%s_move_xy" % (prefix_str, uid))
redis.delete("%s_%s_img_error_count" % (prefix_str, uid))
random_str = str(uuid.uuid1()).replace('-', '')
redis.set("%s_%s_img_randm_str" % (prefix_str, uid), random_str, 30)
return (True,random_str)
else:
error_count = redis.get("%s_%s_img_error_count" % (prefix_str, uid))
if error_count:
error_count = int(error_count.decode())
new_count = error_count + 1
if new_count > 5:
describe = '%s 尝试次数过多' % (uid)
redis.delete("%s_%s_bg_img" % (prefix_str, uid))
redis.delete("%s_%s_move_img" % (prefix_str, uid))
redis.delete("%s_%s_move_xy" % (prefix_str, uid))
redis.delete("%s_%s_img_error_count" % (prefix_str, uid))
return (False,describe,True)
else:
redis.set("%s_%s_img_error_count" % (prefix_str, uid), new_count, 30)
describe = '%s 认证失败' % (uid)
return (False,describe)
else:
describe = '%s 认证失败' % (uid)
return (False,describe,True)
else:
describe = '%s 认证失败' % (uid)
return (False,describe,True)
python之滑动认证(图片)的更多相关文章
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- H5+CSS3实现手指滑动切换图片
包含3个文件:html.slider-H5.js.jquery.js(自行下载).在html中可配置滑动参数.具体代码如下: HTML代码: <!DOCTYPE HTML> <htm ...
- ReactNative学习-滑动查看图片第三方组件react-native-swiper
滑动查看图片第三方组件:react-native-swiper,现在的版本为:1.4.3,该版本还不支持Android. 下面介绍的是该组件的一些用法,可能总结的不完整,希望大家一起来共同完善. 官方 ...
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
- Python实战:美女图片下载器,海量图片任你下载
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- Python,PIL压缩裁剪图片
自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...
- Python爬虫下载美女图片(不同网站不同方法)
声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...
- Python 3 实现色情图片识别
Python 3 实现色情图片识别 项目简介 项目内容 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图片处理库,会编写算法来划分图像的皮肤区域. 项目知识点 Py ...
随机推荐
- [Go] vscode配置Go环境
首先要先把环境变量配置好,配置好环境变量打开go文件的时候,会自动提示需要安装的扩展在/root/.profile和/home/当前用户/.profile都加上 export GOPATH=/var/ ...
- greenlet实现协程
#greenlet 1 import time from greenlet import greenlet # greenlet可以实现一个自行调度的微线程 def work1(): while Tr ...
- appium---Android app资源监控
我们在做app测试的过程中,都会对app内存,cpu这些做一个简单的测试,今天简单的写下如何通过python监控app这些资源变化 实现原理 1.通过adb命令查看app资源内存 2.通过python ...
- Java基本数据类型转换二
public class TestConvert2 { /** * @param args */ public static void main(String[] args) { // TODO Au ...
- lua 2 变量
变量在使用前,必须在代码中进行声明,即创建该变量. 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. Lua 中的 ...
- 判断101-200之间有多少个素数,并输出所有素数,方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
<?php$sum=0;for($i=101;$i<=200;$i++){ for($j=2;$j<=sqrt($i);$j++) { if($i%$j==0 ...
- ORM对象关系映射:
django配置orm: django使用mysql数据库: 首先cmd创建库 settings配置mysql数据库: DATABASES = { 'default': { 'ENGINE': 'dj ...
- CF1041C Coffee Break
CF1041C Coffee Break 题目大意: 给定nn个数和一个kk,这nn个数都不超过mm 每次从没被去掉的数里面选一个数aa,去掉aa,然后可以任意一个b(b>a+k)b(b> ...
- 解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果
解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果 一.前言 最初还是在抖音上看到可以使用简单地代码实现炫酷的网页效果的,但是想要找到可以运行的代码还是比较困难的,最近突然想起就在 ...
- (三十)golang--面向对象
首先我们要明确: golang并不是纯粹的面向对象的编程语言: golang没有类class,使用struct代替: golang面向对象编程非常简洁,去掉了传统的继承.重载.构造函数和析构函数.隐藏 ...