下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:8719
这个代码实现了电商购买记录截图生成器,包含以下功能:
模拟京东和淘宝的订单界面
自动生成随机的订单号、商品信息和价格
支持多种订单状态显示
计算订单总金额
使用前需要安装Pillow和Faker库:
pip install pillow faker
代码使用了面向对象设计,可以轻松扩展支持更多电商平台。生成的截图会保存在output目录下。
import os
from PIL import Image, ImageDraw, ImageFont
import random
import datetime
import textwrap
from faker import Faker
fake = Faker('zh_CN')
class EcommerceScreenshotGenerator:
def init(self):
self.font_path = "simhei.ttf"
self.template_dir = "templates"
self.output_dir = "output"
self._create_dirs()
def _create_dirs(self):
os.makedirs(self.template_dir, exist_ok=True)
os.makedirs(self.output_dir, exist_ok=True)
def _load_font(self, size):
try:
return ImageFont.truetype(self.font_path, size)
except:
return ImageFont.load_default()
def _generate_order_number(self, platform):
prefix = {
"jd": "JD",
"taobao": "TB"
}.get(platform, "OR")
return f"{prefix}{datetime.datetime.now().strftime('%Y%m%d')}{random.randint(1000,9999)}"
def _generate_product_info(self, count=1):
products = []
for _ in range(count):
product = {
"name": fake.text(max_nb_chars=20)[:-1],
"price": round(random.uniform(50, 9999), 2),
"quantity": random.randint(1, 5),
"sku": f"SKU{fake.random_number(digits=8)}",
"status": random.choice(["待发货", "已发货", "已完成", "已取消"])
}
products.append(product)
return products
def _calculate_total(self, products):
return sum(p["price"] * p["quantity"] for p in products)
def generate_jd_screenshot(self):
# 创建空白图片
img = Image.new('RGB', (750, 1334), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
# 设置字体
title_font = self._load_font(24)
normal_font = self._load_font(18)
small_font = self._load_font(14)
# 生成订单信息
order_num = self._generate_order_number("jd")
order_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
products = self._generate_product_info(random.randint(1, 5))
total = self._calculate_total(products)
# 绘制京东头部
draw.rectangle([(0, 0), (750, 120)], fill=(200, 0, 0))
draw.text((30, 50), "京东", fill=(255, 255, 255), font=title_font)
# 绘制订单信息
y_offset = 150
draw.text((30, y_offset), f"订单编号: {order_num}", fill=(0, 0, 0), font=normal_font)
y_offset += 40
draw.text((30, y_offset), f"下单时间: {order_time}", fill=(0, 0, 0), font=normal_font)
y_offset += 60
# 绘制商品信息
for product in products:
draw.text((30, y_offset), product["name"], fill=(0, 0, 0), font=normal_font)
y_offset += 30
draw.text((30, y_offset), f"¥{product['price']} x{product['quantity']}", fill=(150, 150, 150), font=small_font)
y_offset += 30
draw.text((30, y_offset), f"状态: {product['status']}", fill=(0, 0, 0), font=small_font)
y_offset += 40
draw.line([(20, y_offset), (730, y_offset)], fill=(200, 200, 200), width=1)
y_offset += 20
# 绘制总计
draw.text((30, y_offset), f"实付款: ¥{total}", fill=(200, 0, 0), font=title_font)
# 保存图片
output_path = os.path.join(self.output_dir, f"jd_order_{order_num}.png")
img.save(output_path)
return output_path
def generate_taobao_screenshot(self):
# 创建空白图片
img = Image.new('RGB', (750, 1334), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
# 设置字体
title_font = self._load_font(24)
normal_font = self._load_font(18)
small_font = self._load_font(14)
# 生成订单信息
order_num = self._generate_order_number("taobao")
order_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
products = self._generate_product_info(random.randint(1, 5))
total = self._calculate_total(products)
# 绘制淘宝头部
draw.rectangle([(0, 0), (750, 120)], fill=(255, 80, 0))
draw.text((30, 50), "淘宝", fill=(255, 255, 255), font=title_font)
# 绘制订单信息
y_offset = 150
draw.text((30, y_offset), f"订单号: {order_num}", fill=(0, 0, 0), font=normal_font)
y_offset += 40
draw.text((30, y_offset), f"创建时间: {order_time}", fill=(0, 0, 0), font=normal_font)
y_offset += 60
# 绘制商品信息
for product in products:
draw.text((30, y_offset), product["name"], fill=(0, 0, 0), font=normal_font)
y_offset += 30
draw.text((30, y_offset), f"¥{product['price']} x{product['quantity']}", fill=(150, 150, 150), font=small_font)
y_offset += 30
draw.text((30, y_offset), f"状态: {product['status']}", fill=(0, 0, 0), font=small_font)
y_offset += 40
draw.line([(20, y_offset), (730, y_offset)], fill=(200, 200, 200), width=1)
y_offset += 20
# 绘制总计
draw.text((30, y_offset), f"实付款: ¥{total}", fill=(255, 80, 0), font=title_font)
# 保存图片
output_path = os.path.join(self.output_dir, f"taobao_order_{order_num}.png")
img.save(output_path)
return output_path
if name == "main":
generator = EcommerceScreenshotGenerator()
jd_path = generator.generate_jd_screenshot()
taobao_path = generator.generate_taobao_screenshot()
print(f"京东订单截图已生成: {jd_path}")
print(f"淘宝订单截图已生成: {taobao_path}")