from PIL import Image, ImageDraw def hex_to_rgb(hex_code): hex_code = hex_code.lstrip('#') return tuple(int(hex_code[i:i+2], 16) for i in (0, 2, 4)) # 1. Vertical Gradient h = 2000 img = Image.new('RGB', (1, h)) draw = ImageDraw.Draw(img) color_top = hex_to_rgb('#1a1130') color_bottom = hex_to_rgb('#120d22') for y in range(h): r = int(color_top[0] + (color_bottom[0] - color_top[0]) * (y / h)) g = int(color_top[1] + (color_bottom[1] - color_top[1]) * (y / h)) b = int(color_top[2] + (color_bottom[2] - color_top[2]) * (y / h)) draw.point((0, y), fill=(r, g, b)) img.save('bg_gradient.png') # 2. Top-Left and Top-Right Glows (Large image, say 2000x800) w_glow, h_glow = 2000, 800 img_glow = Image.new('RGBA', (w_glow, h_glow), (0, 0, 0, 0)) draw_glow = ImageDraw.Draw(img_glow) # Top left glow: #e0a05b 8% opacity, transparent at 28% # Top right glow: #8b4789 18% opacity, transparent at 30% # We'll just approximate it. center_left = (0, 0) radius_left = 600 center_right = (2000, 0) radius_right = 650 for y in range(h_glow): for x in range(w_glow): # Left dist_left = ((x - center_left[0])**2 + (y - center_left[1])**2)**0.5 alpha_left = 0 if dist_left < radius_left: alpha_left = int(255 * 0.08 * (1 - dist_left / radius_left)) # Right dist_right = ((x - center_right[0])**2 + (y - center_right[1])**2)**0.5 alpha_right = 0 if dist_right < radius_right: alpha_right = int(255 * 0.18 * (1 - dist_right / radius_right)) r, g, b, a = 0, 0, 0, 0 if alpha_left > alpha_right: r, g, b, a = 224, 160, 91, alpha_left elif alpha_right > 0: r, g, b, a = 139, 71, 137, alpha_right if a > 0: draw_glow.point((x, y), fill=(r, g, b, a)) img_glow.save('bg_glows.png') # 3. Button Background (since linear-gradients are not in CSS2) # Button linear-gradient(135deg, #e0a05b, #f1ba77) # Let's just make a small 10x100 vertical gradient for button that can be repeated horizontally img_btn = Image.new('RGB', (1, 100)) draw_btn = ImageDraw.Draw(img_btn) c1 = hex_to_rgb('#e0a05b') c2 = hex_to_rgb('#f1ba77') for y in range(100): r = int(c1[0] + (c2[0] - c1[0]) * (y / 100)) g = int(c1[1] + (c2[1] - c1[1]) * (y / 100)) b = int(c1[2] + (c2[2] - c1[2]) * (y / 100)) draw_btn.point((0, y), fill=(r, g, b)) img_btn.save('btn_bg.png')