前言 

在我们工作和生活中,你使用过电子签名吗?众所周知,电子签名可以使用Photoshop制作。几天前,那时候还没返校(疫情期间),需要在一个文件里面提交多个人的手写签名,但他们离我很远。在没看到詹帅这篇Python制作电子签名的文章之前,我是这么做的(只是稍微总结一下PS的做法,重点还是Python的方法)。我录制了一个动图演示。

调整对比度和亮度

其实就是在Photoshop中打开图像,把“对比度”和“亮度”都调到最高,然后另存为PNG图片。这样做的弊端就是保存后的图片是白色底的(不是透明的),放在Word中是没有问题的;不过如果背景色不是白色的,那么就很难看了(需要进一步抠图)这篇文章介绍的用Python制作的电子签名,就是透明的(效果见封面图);并且用Python还可以批量自动化。人生苦短,我用Python,毕竟它除了生孩子无所不会!搞定电子签名手到擒来的事情!往下看?

代码 

首先需要导入Python程序所依赖的包。Image用来读取图片,numpy用来对图片数组进行计算操作,argparse用来获取命令行传入参数,os用来操作路径。

from PIL import Imageimport numpy as npimport argparseimport os

紧接着定义读取图片函数,并将其转化为包含alpha通道的“RGBA”格式图片。

def read_img(img_path):    image=Image.open(img_path)    image = image.convert('RGBA')    size = image.size    image = np.array(image)    return size, image

之后便是定义生成电子签名函数,签名是黑区域,像素值接近0。因此将RGB三个通道像素值大于100的设置为透明,并返回签名位置区域坐标点和处理过后的图片。

def get_elesign(size,image):    '''    签名是黑色区域,像素值接近0。    size:输入图片尺寸    image:numpy array格式的图像    '''    points = []    for j in range(size[0]):        for i in range(size[1]):            if image[i][j][0]>100 and image[i][j][1]>100 and image[i][j][2]>100:                image[i][j][3] = 0            else:                image[i][j][0],image[i][j][1],image[i][j][2] = 0,0,0                points.append((i,j))     return points, image

定义裁剪函数,找到签名区域,返回电子签名。

def clip_image(points, image, save_path, offset=5):    points = np.array(points).reshape((-1, 2))    min_value = np.min(points,axis=0)    x1,y1 = min_value[0]-offset,min_value[1]-offset    max_value = np.max(points,axis=0)    x2,y2 = max_value[0]+offset,max_value[1]+offset    sign_area = image[x1:x2,y1:y2]    sign_area = Image.fromarray(sign_area)    sign_area.save(save_path)

最后实例化。

大功告成!

if __name__ == "__main__":    parser = argparse.ArgumentParser(description="制作电子签名!")    parser.add_argument("--image_path",type=str, help = "签名图片位置, dir or file")    parser.add_argument("--offset",type=int, default=5, help = "签名向外扩张范围,默认为5个像素")    arg = parser.parse_args()    user_give = arg.image_path    offset = arg.offset    if os.path.isdir(user_give):        imgs_name = os.listdir(user_give)        for i,name in enumerate(imgs_name):            if os.path.splitext(name)[-1] in [".jpeg",".JPG",".PNG",".jpg",".png"]:                basename = os.path.splitext(name)[0]                img_path = os.path.join(user_give,name)                save_path = "ele_sign_"+basename+"_%d.png"%i                size,image = read_img(img_path)                points, image = get_elesign(size,image)                clip_image(points, image,  save_path, offset)    elif os.path.isfile:        img_path = user_give        save_path = "ele_sign.png"        size,image = read_img(img_path)        points, image = get_elesign(size,image)        clip_image(points, image, save_path, offset)

执行 

为了方便执行,我加了两个终端参数:

--image_path--offset

前者是用来传入文件路径,这里的路径可以是图片文件,也可以是目录。如果是目录则会遍历目录中的图片文件,进行批量制作电子签名。后者为签名位置修正,默认是5。终端python环境执行命令:

python make_ele_sign.py --image_path 图片或者目录路径

简单粗暴!

效果 

最后看看效果!分分钟便拥有了自己帅气的电子签名!(请自动忽略我的笔迹,已经被嘲讽过多次了)

这样骚包的Python,你爱不爱?

PS:拍摄的签名需要写在白纸上,且背景尽量不要其他噪声,如果拍摄的图片质量不好,使用该方法得到的电子签名可以手动修剪图片。完整代码已经打包好,在后台回复关键词 电子签名 即可获取

-END-

猜你喜欢

1、Python两行代码剪藏网页为 PDF2、Python快速卡通化人物头像3、有一分热,发一分光

@天作之程

你好起来,身边的一切都会好起来

  在看”  我吗?

python photoshop自动化_你会用Python 搞定你的电子签名吗?相关推荐

  1. 【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择

    很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿. 看好了主要步骤就4部 1.确定谷歌浏览器版本 2.找到谷歌浏览器版本与Chrom ...

  2. python接口测试面试_面试秘籍 | 一文搞定面试中接口测试问题

    作为软件测试的垂直领域深耕者,不仅要精于软件测试技术,更要关注行业软件测试需求,最直观的需求莫过于企业招聘需求,最近有不少求职的朋友跟我诉苦,企业对接口测试的要求越来越多了,都跪在了接口测试上,这让我 ...

  3. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  4. Python自动化(十二):一分钟搞定几百个Excel中查找的数据

    一.需求说明 首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名.同个年度的总表在年末可能会有两. ...

  5. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  6. Python 内置模块之 re 库,一文搞定正则表达式初阶用法,滚雪球学 Python 第 13 篇

    橡皮擦,一个逗趣的互联网高级网虫.新的系列,让我们一起 Be More Pythonic. 滚雪球学 Python 第二轮 已完成的文章清单 十三.Python 内置模块之 re 库,一文搞定正则表达 ...

  7. 如何用python实现自动化_如何使用Python实现自动化水军评论

    前言 玩博客一个多月了,渐渐发现了一些有意思的事,经常会有人用同样的评论到处刷,不知道是为了加没什么用的积分,还是纯粹为了表达楼主好人.那么问题来了,这种无聊的事情当然最好能够自动化咯,自己也来试了一 ...

  8. python 书籍 办公 自动化_你们都用Python实现了哪些办公自动化?

    这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音. 自动化办公无非是excel.ppt.word. ...

  9. python 打印机自动化_用Python实现定时自动化收取蚂蚁森林能量,再也不怕被偷了...

    1. 概述 提到蚂蚁森林,大家应该都知道,你是否有因忘记收取能量而被好友收取的经历呢? 如果你不是蚂蚁森林重度用户,被别人收取了能量可能对你来说没什么. 但如果你是蚂蚁森林重度用户,遇到能量被偷 .. ...

  10. python编程快速上手-----让繁琐工作自动化_每周一书《Python编程快速上手 让繁琐工作自动化》分享!...

    内容简介 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 本书是 ...

最新文章

  1. SpringBoot2.x 官方推荐缓存框架-Caffeine高性能设计剖析
  2. Fabric动态增加组织【资料】
  3. 揪出MySQL延迟上千秒的元凶
  4. Java 中long类型转换成为int类型时可能会出错的地方
  5. SimpleDateFormat的一些简单用法:时间类型转字符串,字符串转时间
  6. 数据结构---function
  7. Python数据分析(二):DataFrame基本操作
  8. 【无线芯片解读】2.4G专题:(SI24R1简版)Ci24R1
  9. 我的阿里面试经验分享给大家
  10. 局域网组网方案,电信1000M宽带无线WiFi满速方案与排查(随记)
  11. Qt开发笔记之编码h264码流并封装mp4(六):ubuntu平台编译mp4v2并封装mp4
  12. 计算机cpu天体图,电脑cpu天梯图2019|最新Intel/AMD处理器性能排行2019
  13. RAR压缩包没有密码如何解压
  14. 题解 CF 1413B A New Technique
  15. 二分法解一元三次方程c语言,用二分法求一元三次方程的C++程序
  16. 希腊字母含义及快捷键输入
  17. 容联云实现手机验证码
  18. 数据压缩作业1之:使用音频分析软件(Audacity)分析浊音、清音爆破音的时域及频域特性。
  19. VB和VB.NET的大致区别
  20. CPT模型:一种中文兼顾NLU和NLG的非平衡预训练语言模型

热门文章

  1. Electron 应用实战 (架构篇)
  2. Java_基础_fail-fast
  3. 【Silverlight】Bing Maps学习系列(一):开发前的准备工作
  4. HTK在win7下安装的一些问题
  5. 时间管理(二):时间管理的六项基本原则
  6. Ruby 2.0 发布首个预览版
  7. Shell中的grep、awk和sed的常用命令和语法
  8. java取消科学计数法_Jmeter、Java当double显示的数字过长时取消科学计数法显示
  9. spring源码:@Bean注解解析
  10. 操作mysql5.7过程中遇到的问题