#!/usr/bin/env python3
"""
Writech 商标图像处理脚本
- 去除蓝色底色，生成透明 PNG
- 系列化简洁处理，适配商标注册
"""
from PIL import Image, ImageFilter, ImageDraw
import os

SRC = "/Users/jiahong/Library/Application Support/Qoder/SharedClientCache/cache/images/7702e5b9/截屏2026-03-04 10.30.55-0be34715.jpg"
OUT_DIR = "/Users/jiahong/Documents/Job/docs/jiahong_docs/education/writech_logo"
os.makedirs(OUT_DIR, exist_ok=True)

img = Image.open(SRC).convert("RGBA")
w, h = img.size
pixels = img.load()

# ========== 1. 去蓝色底色 → 透明 PNG ==========
def remove_blue_bg(image, tolerance=100):
    """将蓝色背景区域变为透明"""
    result = image.copy()
    px = result.load()
    for y in range(result.height):
        for x in range(result.width):
            r, g, b, a = px[x, y]
            # 蓝色背景特征: B高, R低, G中低
            # 原图蓝色约 (70, 130, 210) 左右
            if b > 140 and r < 130 and b > r + 40:
                # 越接近纯蓝越透明
                blue_ratio = (b - r) / max(b, 1)
                if blue_ratio > 0.3:
                    px[x, y] = (r, g, b, 0)
            # 处理边缘过渡区 (半透明)
            elif b > 120 and r < 150 and b > r + 20:
                alpha = int(255 * (1 - (b - r) / max(b, 1)))
                alpha = max(0, min(255, alpha))
                px[x, y] = (r, g, b, alpha)
    return result

print("生成 1: 透明底色原图...")
transparent = remove_blue_bg(img)
transparent.save(os.path.join(OUT_DIR, "writech_logo_transparent.png"), "PNG")

# ========== 2. 纯绿色线条版 (最简洁, 商标注册首选) ==========
print("生成 2: 纯绿色线条版...")
def extract_green_lines(image):
    """提取绿色线条，黑色描边，白色/透明背景"""
    result = Image.new("RGBA", image.size, (0, 0, 0, 0))
    px_src = image.load()
    px_dst = result.load()
    for y in range(image.height):
        for x in range(image.width):
            r, g, b, a = px_src[x, y]
            # 绿色线条: G高, R中高, B低
            # 原图绿色约 (160, 210, 50) 左右
            if g > 140 and g > b + 50 and g > r * 0.8:
                # 保留为纯绿色
                intensity = g / 255.0
                px_dst[x, y] = (100, 190, 60, int(255 * intensity))
    return result

green_lines = extract_green_lines(img)
green_lines.save(os.path.join(OUT_DIR, "writech_logo_green_lines.png"), "PNG")

# ========== 3. 纯黑色线条版 (单色商标注册) ==========
print("生成 3: 纯黑色线条版...")
def extract_black_lines(image):
    """提取线条并转为纯黑色，适合单色商标"""
    result = Image.new("RGBA", image.size, (0, 0, 0, 0))
    px_src = image.load()
    px_dst = result.load()
    for y in range(image.height):
        for x in range(image.width):
            r, g, b, a = px_src[x, y]
            if g > 140 and g > b + 50 and g > r * 0.8:
                intensity = g / 255.0
                px_dst[x, y] = (0, 0, 0, int(255 * intensity))
    return result

black_lines = extract_black_lines(img)
black_lines.save(os.path.join(OUT_DIR, "writech_logo_black.png"), "PNG")

# ========== 4. 白底黑线版 (传统商标注册用) ==========
print("生成 4: 白底黑线版...")
white_bg = Image.new("RGBA", img.size, (255, 255, 255, 255))
white_bg = Image.alpha_composite(white_bg, black_lines)
white_bg.save(os.path.join(OUT_DIR, "writech_logo_white_bg_black.png"), "PNG")

# ========== 5. 白底绿线版 ==========
print("生成 5: 白底绿线版...")
white_bg2 = Image.new("RGBA", img.size, (255, 255, 255, 255))
white_bg2 = Image.alpha_composite(white_bg2, green_lines)
white_bg2.save(os.path.join(OUT_DIR, "writech_logo_white_bg_green.png"), "PNG")

# ========== 6. 正方形裁切版 (适配商标规范尺寸) ==========
print("生成 6: 正方形版本...")
size = max(w, h)
square = Image.new("RGBA", (size, size), (0, 0, 0, 0))
offset_x = (size - w) // 2
offset_y = (size - h) // 2
square.paste(transparent, (offset_x, offset_y), transparent)
# 缩放到标准尺寸 1000x1000
square_1000 = square.resize((1000, 1000), Image.LANCZOS)
square_1000.save(os.path.join(OUT_DIR, "writech_logo_square_1000.png"), "PNG")

# ========== 7. 小尺寸 icon 版 (256x256, 128x128, 64x64) ==========
print("生成 7: 多尺寸 icon...")
for sz in [512, 256, 128, 64]:
    icon = square.resize((sz, sz), Image.LANCZOS)
    icon.save(os.path.join(OUT_DIR, f"writech_icon_{sz}.png"), "PNG")

# ========== 8. 商标注册专用 - 极简轮廓版 ==========
print("生成 8: 极简轮廓版...")
# 先提取绿色通道做灰度，然后二值化得到清晰轮廓
gray = img.convert("L")
# 使用绿色通道强度作为阈值参考
r_ch, g_ch, b_ch, a_ch = img.split()
# 绿色减蓝色 = 线条区域
from PIL import ImageChops
diff = ImageChops.subtract(g_ch, b_ch)
# 二值化
threshold = 60
binary = diff.point(lambda p: 255 if p > threshold else 0, mode='1')
# 转回 RGBA 透明底
outline = Image.new("RGBA", img.size, (0, 0, 0, 0))
px_bin = binary.load()
px_out = outline.load()
for y in range(img.height):
    for x in range(img.width):
        if px_bin[x, y]:
            px_out[x, y] = (0, 0, 0, 255)
outline.save(os.path.join(OUT_DIR, "writech_logo_outline.png"), "PNG")

# 白底轮廓版
white_outline = Image.new("RGBA", img.size, (255, 255, 255, 255))
white_outline = Image.alpha_composite(white_outline, outline)
white_outline.save(os.path.join(OUT_DIR, "writech_logo_outline_white.png"), "PNG")

print(f"\n✅ 全部完成！输出目录: {OUT_DIR}")
print("生成文件列表:")
for f in sorted(os.listdir(OUT_DIR)):
    if f.endswith('.png'):
        fpath = os.path.join(OUT_DIR, f)
        fsize = os.path.getsize(fpath)
        im = Image.open(fpath)
        print(f"  {f:45s} {im.size[0]:5d}x{im.size[1]:<5d} {fsize//1024:>5d} KB")
