python怎么设置图片尺寸_Python骚操作!你还在用PS制作电子签名吗?

​前言

在我们工作和生活中,你使用过电子签名吗?

众所周知,电子签名可以使用Photoshop制作,但是Photoshop安装过程复杂,占内存,杀鸡焉用牛刀?而且网上提供的在线转换也要注意安全性!

人生苦短,我用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,你爱不爱?

17a3bad0f74b14f4d00f4f5514bc046e.png

PS:拍摄的签名需要写在白纸上,且背景尽量不要其他噪声,如果拍摄的图片质量不好,使用该方法得到的电子签名可以手动修剪图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值