天天看點

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

前言:

利用pyqt5實作一個簡單的GUI。

廢話不多說,讓我們愉快地開始吧~

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

開發工具

Python版本:3.6.4

相關子產品:

requests子產品;

PyQt5子產品;

pillow子產品;

以及一些python自帶的子產品。

環境搭建

安裝python并添加到環境變量,pip安裝需要的相關子產品即可。

原理簡介

原理說起來蠻簡單的,首先,去找個可以根據輸入的姓名來為你生成藝術簽名的網站:

http://www.jiqie.com/a/14.htm
           

上面那個網站大概長這樣子:

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

簡單抓包(就是F12打開開發者工具或滑鼠右鍵審查元素,然後點選一下給我設計,看下生成藝術簽名需要構造哪些請求,簡單分析一下就行)可以發現請求下圖中這個連結就可以傳回生成的藝術簽名圖檔連結位址了:

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

請求時需要攜帶的參數如下:

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

很容易可以分析出:

1 id: 你的名字
2 zhenbi: 固定值
3 id1和id2: 藝術簽名類型相關參數
4 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界面呗,大概長這樣子:

Python實用工具,pyqt5子產品,Python實作自動生成藝術簽名的小工具

其中GUI中的圖檔可以用QLabel()來顯示,一個簡單的例子如下:

1 show_label = QLabel()
2 show_image = Image.open('resource/image/ori.jpg').convert('RGB')
3 fp = io.BytesIO()
4 show_image.save(fp, 'JPEG')
5 qtimage = QtGui.QImage()
7 qtimage.loadFromData(fp.getvalue(), 'JPEG')
8 qtimage_pixmap = QtGui.QPixmap.fromImage(qtimage)
9 show_label.setPixmap(qtimage_pixmap)
           

基本都是pyqt5的操作。

文章到這裡就結束了,感謝你的觀看,關注我每天分享Python小工具系列,下篇文章分享PyQt5+qrcode制作二維碼生成工具

繼續閱讀