#!/usr/bin/env python3 """设计一张精美的IT咨询超时提醒卡片""" from PIL import Image, ImageDraw, ImageFont import os # 卡片尺寸 WIDTH, HEIGHT = 700, 400 # 创建图片 img = Image.new('RGBA', (WIDTH, HEIGHT), (0, 0, 0, 0)) draw = ImageDraw.Draw(img) # ============== 背景层 ============== # 渐变背景 (蓝 → 青) for y in range(HEIGHT): ratio = y / HEIGHT r = int(7 + (124 - 7) * ratio) # 7 → 124 g = int(193 + (217 - 193) * ratio) # 193 → 217 b = int(255 + (245 - 255) * ratio) # 255 → 245 draw.line([(0, y), (WIDTH, y)], fill=(r, g, b, 255)) # ============== 装饰元素 ============== # 顶部装饰条 draw.rectangle([0, 0, WIDTH, 6], fill=(255, 255, 255, 80)) # 底部椭圆高光 draw.ellipse([WIDTH//2 - 200, HEIGHT - 80, WIDTH//2 + 200, HEIGHT + 20], fill=(255, 255, 255, 30)) # ============== 主标题 ============== try: title_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 42) subtitle_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 26) button_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 32) time_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 56) except: title_font = ImageFont.load_default() subtitle_font = ImageFont.load_default() button_font = ImageFont.load_default() time_font = ImageFont.load_default() # 标题 draw.text((50, 50), "🔔 您的IT咨询", fill=(255, 255, 255), font=title_font) # 副标题 draw.text((50, 110), "将会在 2 分钟后关闭", fill=(220, 240, 255), font=subtitle_font) # ============== 3D水晶按钮 ============== btn_x, btn_y = 50, 200 btn_w, btn_h = 600, 90 # 1. 阴影层 (偏移) shadow_offset = 8 draw.rounded_rectangle( [btn_x + shadow_offset, btn_y + shadow_offset, btn_x + btn_w + shadow_offset, btn_y + btn_h + shadow_offset], radius=20, fill=(0, 80, 150, 120)) # 2. 按钮主体 (渐变) for i in range(btn_h): ratio = i / btn_h # 蓝 → 青渐变 r = int(7 + (0 - 7) * ratio) g = int(193 + (200 - 193) * ratio) b = int(255 + (220 - 255) * ratio) draw.rectangle( [btn_x, btn_y + i, btn_x + btn_w, btn_y + i + 1], fill=(r, g, b, 255)) # 3. 高光层 (水晶效果) # 顶部高光 draw.rounded_rectangle( [btn_x, btn_y, btn_x + btn_w, btn_y + btn_h // 2.5], radius=20, fill=(255, 255, 255, 60)) # 中间高光线 draw.line([(btn_x + 30, btn_y + 25), (btn_x + btn_w - 30, btn_y + 25)], fill=(255, 255, 255, 100), width=3) # 4. 按钮边框 draw.rounded_rectangle( [btn_x, btn_y, btn_x + btn_w, btn_y + btn_h], radius=20, outline=(255, 255, 255, 80), width=2) # 5. 按钮文字 btn_text = "⚡ 立即回复" text_bbox = draw.textbbox((0, 0), btn_text, font=button_font) text_width = text_bbox[2] - text_bbox[0] draw.text((btn_x + (btn_w - text_width) // 2, btn_y + (btn_h - 28) // 2), btn_text, fill=(255, 255, 255), font=button_font) # ============== 底部提示 ============== draw.text((50, 320), "请尽快回复坐席,否则咨询将自动结束", fill=(200, 220, 240, 200), font=subtitle_font) # 保存 output_path = "/tmp/it_reminder_card.png" img.save(output_path, format='PNG') print(f"✅ 卡片已生成: {output_path}") print(f" 尺寸: {WIDTH}x{HEIGHT}")