python版本:3.6
需手動安裝python庫列表:
- requests
- pillow(注意:項目中的PIL庫的安裝並不是pil,而應該是pillow)
瀏覽器:火狐瀏覽器
完成效果:
項目分析:
- 設計界面
- 獲取設計簽名圖片
- 下載圖片並顯示
一、設計界面
from tkinter import *
from tkinter import messagebox
from tkinter import ttk # 注意:下拉列表在ttk中
from PIL import ImageTk
window = Tk() # 創建窗體
window.geometry('535x345') # 設置窗體大小
# 關於爲什麼窗體是這個大小的問題,本人寬度是參照生成圖片的寬度的,高度就自己測了
window.resizable(0,0) # 設置固定窗體尺寸
window.title('個性簽名設計器') # 設置窗體名稱
window.iconbitmap('./image/icon.ico') # 設置窗體圖標
Label(window,text='姓名:',font=('華文行楷',20)).place(x=20,y=20)
name_entry = Entry(window,font=('華文行楷',20))
name_entry.place(x=120,y=20)
Label(window,text='字體:',font=('華文行楷',20)).place(x=20,y=80)
font_box = ttk.Combobox(window,width=10,height=1,font=('華文行楷',20))
font_box.place(x=120,y=80)
# 通過設置下拉列表的'value'屬性可以添加選項
font_box['value'] = ('個性籤','連筆籤','瀟灑籤','草體籤','合文籤','商務籤','可愛籤')
font_box.current(0) # 下拉列表默認項下標
def get_image():
name = name_entry.get()
print(name)
Button(window,width=10,height=3,text='生成簽名',font=('華文行楷',20),command=get_image).place(x=380,y=20)
bm = ImageTk.PhotoImage(file='./image/空白.gif') # 讀入圖片
# 可以先到網站下載一張空白的圖片佔位,這樣生成之後不會顯得很突兀
label_image = Label(window,image = bm)
label_image.bm = bm
label_image.place(x=0,y=140)
window.mainloop()
如果有相關Tkinter控件參數不瞭解的,可自行百度,或者參考本人寫的相關Tk的文章,相信講的已經非常清楚了,如還有疑問,請在下面留言!!!
二、獲取設計簽名圖片
思路分析:
- 獲取請求網址地址:http://www.uustv.com/
- 提交的信息:
名字
字體
…… - 獲取生成圖片地址
網站分析:
- 按快捷鍵“Ctrl+Shfit+E”,彈出網絡窗口,這樣我們就可以看見網頁的請求信息,然後再作分析;
- 填好信息,發送請求,我們翻到第一個,點擊它,就可以看到請求信息了
通過這個信息我們可以知道如下信息:
請求網址:http://www.uustv.com/
請求方法:POST - 點擊右邊的選項卡“參數”,查看提交的參數信息
從中我們可以知道,我們提交了四個數據:
關鍵字(名字):蘋果
字體大小:60
字體:jfcs.ttf
字體顏色:#00000000 - 右擊生成的圖片,點擊“審查元素”,查找生成圖片的地址
代碼分析:
import requests
import re
# 設置請求參數
data = {
"word": '蘋果',
"sizes": "60",
"fonts": 'jfcs.ttf',
"fontcolor": "#000000"
}
url = 'http://www.uustv.com/' # 設置請求網址
result = requests.post(url,data) # 發送請求,獲取返回信息
result.encoding = 'utf-8' # 設置編碼格式
# 注意:如果不設置編碼格式,有可能會亂碼,網頁編碼格式可以通過源碼的“charset”屬性獲得,搜索一下即可
html = result.text # 獲取返回源碼
reg = f'<div class="tu"><img src="(.*?)"/></div>' # 設置正則表達式檢索規則
img_path = re.findall(reg,html) # 根據檢索規則搜索源碼,提取圖片地址
img_adress = url + img_path[0] # 補全圖片地址
image = requests.get(img_adress).content # 獲取圖片內容
# 將獲取到的二進制信息寫入文件並保存
with open('蘋果.gif','wb') as f:
f.write(image)
三、完整代碼
from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from PIL import ImageTk
import requests
import re
window = Tk()
window.geometry('535x345')
window.resizable(0,0)
window.title('個性簽名設計器')
window.iconbitmap('./image/icon.ico')
Label(window,text='姓名:',font=('華文行楷',20)).place(x=20,y=20)
name_entry = Entry(window,font=('華文行楷',20))
name_entry.place(x=120,y=20)
Label(window,text='字體:',font=('華文行楷',20)).place(x=20,y=80)
font_box = ttk.Combobox(window,width=10,height=1,font=('華文行楷',20))
font_box.place(x=120,y=80)
font_box['value'] = ('個性籤','連筆籤','瀟灑籤','草體籤','合文籤','商務籤','可愛籤')
font_box.current(0)
font = {
'個性籤':'jfcs.ttf',
'連筆籤':'qmt.ttf',
'瀟灑籤':'bzcs.ttf',
'草體籤':'lfc.ttf',
'合文籤':'haku.ttf',
'商務籤':'zql.ttf',
'可愛籤':'yqk.ttf'
}
def get_image():
name = name_entry.get()
name = name.strip()
if name == '':
messagebox.showwarning('警告',message='請輸入你的姓名')
else:
fonts = font[font_box.get()]
data = {
"word": name,
"sizes": "60",
"fonts": fonts,
"fontcolor": "#000000"
}
url = 'http://www.uustv.com/'
result = requests.post(url,data)
result.encoding = 'utf-8'
html = result.text
reg = f'<div class="tu"><img src="(.*?)"/></div>'
img_path = re.findall(reg,html)
img_adress = url + img_path[0]
image = requests.get(img_adress).content
with open('{}.gif'.format(name),'wb') as f:
f.write(image)
bm = ImageTk.PhotoImage(file='{}.gif'.format(name))
label_image = Label(window,image = bm)
label_image.bm = bm
label_image.place(x=0,y=140)
Button(window,width=10,height=3,text='生成簽名',font=('華文行楷',20),command=get_image).place(x=380,y=20)
bm = ImageTk.PhotoImage(file='./image/空白.gif')
label_image = Label(window,image = bm)
label_image.bm = bm
label_image.place(x=0,y=140)
window.mainloop()