下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:7819
该实现包含以下核心技术点12:
使用Pillow库进行图像处理和文字绘制
支持三大电商平台模板配置
自动生成符合平台规则的订单编号
提供GUI界面简化操作流程
扩展功能建议34:
添加历史记录管理功能
支持批量生成订单截图
增加更多自定义选项(时间、店铺名等)
注意:实际使用时需要准备各平台的背景模板图片,并调整坐标参数以匹配真实界面布局56。
import tkinter as tk
from tkinter import ttk
import random
import time
from PIL import Image, ImageDraw, ImageFont
import json
import os
class OrderGenerator:
def init(self):
self.root = tk.Tk()
self.root.title("电商订单生成器 v2.1")
self.setup_ui()
self.load_templates()
def load_templates(self):
self.templates = {
'taobao': {
'bg_image': 'taobao_template.png',
'font': 'arial.ttf',
'fields': ['order_id', 'item_name', 'price', 'status']
},
'jd': {
'bg_image': 'jd_template.png',
'font': 'simhei.ttf',
'fields': ['order_no', 'product', 'amount', 'state']
},
'pdd': {
'bg_image': 'pdd_template.png',
'font': 'simsun.ttc',
'fields': ['sn', 'goods', 'total', 'progress']
}
}
def setup_ui(self):
# 平台选择
ttk.Label(self.root, text="选择平台:").grid(row=0, column=0)
self.platform = ttk.Combobox(self.root, values=['淘宝', '京东', '拼多多'])
self.platform.grid(row=0, column=1)
# 订单信息输入
fields_frame = ttk.LabelFrame(self.root, text="订单详情")
fields_frame.grid(row=1, column=0, columnspan=2, padx=10, pady=10)
ttk.Label(fields_frame, text="商品名称:").grid(row=0, column=0)
self.item_name = ttk.Entry(fields_frame)
self.item_name.grid(row=0, column=1)
ttk.Label(fields_frame, text="价格:").grid(row=1, column=0)
self.price = ttk.Entry(fields_frame)
self.price.grid(row=1, column=1)
ttk.Label(fields_frame, text="订单状态:").grid(row=2, column=0)
self.status = ttk.Combobox(fields_frame,
values=['待付款', '待发货', '已发货', '已完成'])
self.status.grid(row=2, column=1)
# 生成按钮
ttk.Button(self.root, text="生成截图",
command=self.generate_screenshot).grid(row=2, column=0, columnspan=2)
def generate_order_id(self):
timestamp = int(time.time())
rand_num = random.randint(1000, 9999)
return f"{timestamp}{rand_num}"
def generate_screenshot(self):
platform = self.platform.get().lower()
if platform not in self.templates:
tk.messagebox.showerror("错误", "请选择有效平台")
return
try:
template = self.templates[platform]
bg_img = Image.open(template['bg_image'])
draw = ImageDraw.Draw(bg_img)
font = ImageFont.truetype(template['font'], 14)
order_data = {
'order_id': self.generate_order_id(),
'item_name': self.item_name.get(),
'price': self.price.get(),
'status': self.status.get()
}
# 在模板上绘制文本
if platform == 'taobao':
draw.text((120, 180), order_data['order_id'], fill='#333', font=font)
draw.text((120, 220), order_data['item_name'], fill='#333', font=font)
draw.text((500, 220), f"¥{order_data['price']}", fill='#f40', font=font)
draw.text((700, 220), order_data['status'], fill='#f40', font=font)
elif platform == 'jd':
# JD模板坐标不同...
pass
output_path = f"{platform}_order_{order_data['order_id']}.png"
bg_img.save(output_path)
tk.messagebox.showinfo("成功", f"订单截图已保存为 {output_path}")
except Exception as e:
tk.messagebox.showerror("错误", str(e))
if name == "main":
app = OrderGenerator()
app.root.mainloop()
TemplateProcessor:
def init(self, config_file='templates.json'):
self.load_config(config_file)
def load_config(self, config_file):
with open(config_file) as f:
self.config = json.load(f)
def apply_text(self, image, text_data):
for field in self.config['fields']:
if field in text_data:
self._draw_text(
image,
text_data[field],
self.config['positions'][field],
self.config['styles'][field]
)
def _draw_text(self, image, text, position, style):
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(
style['font'],
style['size']
)
draw.text(
(position['x'], position['y']),
text,
fill=style['color'],
font=font
)