開發工具:
版本:3.6.4
相關模塊:
模塊;
PyQt5模塊;
模塊;
以及一些自帶的模塊。
環境搭建:
安裝并添加到環境變量,pip安裝需要的相關模塊即可。
原理簡介:
原理說起來蠻簡單的,首先超簡單簽名設計一筆簽,去找個可以根據輸入的姓名來為你生成藝術簽名的網站:
http://www.jiqie.com/a/14.htm
上面那個網站大概長這樣子:
簡單抓包(就是F12打開開發者工具,然后點擊一下給我設計,看下生成藝術簽名需要構造哪些請求,簡單分析一下就行)可以發現請求下圖中這個鏈接就可以返回生成的藝術簽名圖片鏈接地址了:
請求時需要攜帶的參數如下:
很容易可以分析出:
于是我們很容易就可以實現根據輸入的姓名生成藝術簽名啦:
'''生成簽名'''
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中的圖片可以用()來顯示,一個簡單的例子如下:
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的基本操作(定義一下組件超簡單簽名設計一筆簽,然后自己簡單布局一下,給按鈕設置一下觸發的事件函數等等)。
就這樣唄,大功告成了,完整源代碼詳見相關文件~
效果展示:
在cmd窗口運行如下命令即可:
python ArtSignGenerator.py