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/
- 提交的信息:
名字
字体
…… - 获取生成图片地址
网站分析:
![网站初始界面](https://i-blog.csdnimg.cn/blog_migrate/f7f2a8eff744dee620e16f7fd419491b.png)
- 按快捷键“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()