在线制作艺术签名(电子签名生成)徐大兄弟2021-05-29 11:03:15
相关文件
关注并私信小编给大家分享源码
开发工具
安装python并添加到环境变量,pip安装需要的相关模块即可。
原理介绍
原理说起来蛮简单的,首先,去找个可以根据输入的姓名来为你生成艺术签名的网站:
http://www.jiqie.com/a/14.htm
网站就是这个样子的哟
http://www.jiqie.com/a/14.htm
简单抓包(就是F12打开开发者工具,然后点击一下给我设计,看下生成艺术签名需要构造哪些请求,简单分析一下就行)可以发现请求下图中这个链接就可以返回生成的艺术签名图片链接地址了:
请求时需要携带的参数如下:
很容易就可以分析出:
id: 你的名字zhenbi: 固定值id1和id2: 艺术签名类型相关参数id3和id4: 艺术签名字体颜色相关参数
于是我们很容易就可以实现根据输入的姓名生成艺术签名啦:
def generate(self): font2ids_dict = { '一笔艺术签': ['901', '15'], '连笔商务签': ['904', '15'], '一笔商务签': ['905', '14'], '真人手写': ['343', '14'], '卡通趣圆字': ['397', '14'], '暴躁字': ['380', '14'] } color2ids_dict = { 'Black': ['#000000', '#FFFFFF'], 'Blue': ['#0000FF', '#FFFFFF'], 'Red': ['#FF0000', '#FFFFFF'], 'Green': ['#00FF00', '#FFFFFF'], 'Yellow': ['#FFFF00', '#FFFFFF'], 'Pink': ['#FFC0CB', '#FFFFFF'], 'DeepSkyBlue': ['#00BFFF', '#FFFFFF'], 'Cyan': ['#00FFFF', '#FFFFFF'], 'Orange': ['#FFA500', '#FFFFFF'], 'Seashell': ['#FFF5EE', '#FFFFFF'] } url = 'http://www.jiqie.com/a/re14.php' headers = { 'Referer': 'http://www.jiqie.com/a/14.htm', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36', 'Host': 'www.jiqie.com', 'Origin': 'http://www.jiqie.com' } ids_0 = font2ids_dict[self.font_combobox.currentText()] ids_1 = color2ids_dict[self.color_combobox.currentText()] data = { 'id': self.name_edit.text(), 'zhenbi': '20191123', 'id1': ids_0[0], 'id2': ids_0[1], 'id3': ids_1[0], 'id5': ids_1[1] } res = requests.post(url, headers=headers, data=data) image_url = re.findall(r'src="(.*?)"', res.text)[0] self.show_image_ext = image_url.split('.')[-1].split('?')[0] res = requests.get(image_url) fp = open('tmp.%s' % self.show_image_ext, 'wb') fp.write(res.content) fp.close() self.show_image = Image.open('tmp.%s' % self.show_image_ext).convert('RGB') self.updateimage() os.remove('tmp.%s' % self.show_image_ext)
然后再用pyqt5做个简单的GUI界面呗,大概长这样子:
其中GUI中的图片可以用QLabel()来显示,一个简单的例子如下:
show_label = QLabel()show_image = Image.open('resource/image/ori.jpg').convert('RGB')fp = io.BytesIO()show_image.save(fp, 'JPEG')qtimage = QtGui.QImage()qtimage.loadFromData(fp.getvalue(), 'JPEG')qtimage_pixmap = QtGui.QPixmap.fromImage(qtimage)show_label.setPixmap(qtimage_pixmap)
其他好像也没啥了,都是pyqt5的基本操作(定义一下组件,然后自己简单布局一下,给按钮设置一下触发的事件函数等等)。
就这样呗,大功告成了,完整源代码详见相关文件~
大家有啥问题或者有啥疑问都可以过来找小编的哟!关注私信小编就可以啦。或者在下方评论哟!!