from PIL import Image, ImageDraw, ImageFont
import os, statistics, glob, shutil, math

PROJ='/Users/bot1/Volumes/root_for_ai/AI工作区/良渚_IP授权PDF直接修改_20260611_1117'
IN=f'{PROJ}/work/rendered_before'
OUT=f'{PROJ}/work/patched_pages'
os.makedirs(OUT, exist_ok=True)

FONT='/System/Library/Fonts/PingFang.ttc'
FONT2='/System/Library/Fonts/STHeiti Light.ttc'

def font(size, bold=False):
    for fp in [FONT, FONT2, '/System/Library/Fonts/Supplemental/Arial Unicode.ttf']:
        try:
            return ImageFont.truetype(fp, size)
        except Exception:
            continue
    return ImageFont.load_default()

BODY=(54,48,42)
TITLE=(63,52,42)
GOLD=(177,132,58)

def bg_color(im, box, fallback=(246,244,238)):
    x0,y0,x1,y1=[int(v) for v in box]
    W,H=im.size
    sx0=max(0,x0-16); sy0=max(0,y0-16); sx1=min(W,x1+16); sy1=min(H,y1+16)
    pts=[]
    pix=im.load()
    # sample only light pixels from perimeter and nearby background
    for y in range(sy0, sy1, max(1,(sy1-sy0)//24 or 1)):
        for x in range(sx0, sx1, max(1,(sx1-sx0)//48 or 1)):
            if x0 <= x <= x1 and y0 <= y <= y1:
                # still allow very light pixels inside rect
                pass
            r,g,b = pix[x,y][:3]
            if (r+g+b)/3 > 150:
                pts.append((r,g,b))
    if not pts:
        return fallback
    return tuple(int(statistics.median([p[i] for p in pts])) for i in range(3))

def cover(draw, im, box, pad=2, fill=None):
    x0,y0,x1,y1=box
    x0-=pad; y0-=pad; x1+=pad; y1+=pad
    if fill is None:
        fill=bg_color(im, (x0,y0,x1,y1))
    draw.rectangle([x0,y0,x1,y1], fill=fill)
    return fill

def text(draw, xy, s, size=26, color=BODY, anchor=None, spacing=4):
    draw.multiline_text(xy, s, font=font(size), fill=color, spacing=spacing, anchor=anchor)

def patch_page(page_no, ops):
    path=f'{IN}/page_{page_no:02d}.png'
    im=Image.open(path).convert('RGB')
    draw=ImageDraw.Draw(im)
    for op in ops:
        if op['kind']=='textblock':
            fill=cover(draw, im, op['box'], op.get('pad',4), op.get('fill'))
            text(draw, op['xy'], op['text'], op.get('size',26), op.get('color',BODY), spacing=op.get('spacing',5))
        elif op['kind']=='cover':
            cover(draw, im, op['box'], op.get('pad',4), op.get('fill'))
        elif op['kind']=='text':
            text(draw, op['xy'], op['text'], op.get('size',26), op.get('color',BODY), spacing=op.get('spacing',5))
    im.save(f'{OUT}/page_{page_no:02d}.jpg', quality=95)

# Copy untouched pages first
for fp in sorted(glob.glob(f'{IN}/page_*.png')):
    im=Image.open(fp).convert('RGB')
    page=os.path.splitext(os.path.basename(fp))[0]
    im.save(f'{OUT}/{page}.jpg', quality=95)

patches={
4:[
    {'kind':'textblock','box':(100,482,590,525),'xy':(108,488),'text':'标志着中华五千年文明史得到了国际社会的普遍认可。','size':26},
],
5:[
    {'kind':'textblock','box':(82,176,1035,250),'xy':(88,184),'text':'良渚古城遗址，2019年正式列入《世界遗产名录》——标志着中华五千年文明史获得国际学界\n广泛认可。','size':26,'spacing':8},
    {'kind':'textblock','box':(875,573,1115,612),'xy':(882,580),'text':'最早的堤坝系统','size':31},
],
6:[
    {'kind':'textblock','box':(88,270,540,340),'xy':(92,278),'text':'玉琮、玉璧、玉钺构成完整的玉礼器体系，彰显神权\n与王权的统一，是中华文明多元一体格局的重要源头。','size':24,'spacing':8},
    {'kind':'textblock','box':(586,318,1038,385),'xy':(590,326),'text':'出土炭化稻谷20多万公斤，是良渚时期国家级的\n粮食储备中心。','size':24,'spacing':8},
    {'kind':'textblock','box':(1085,446,1240,470),'xy':(1088,448),'text':'玉璧 · 礼天之器','size':18},
    {'kind':'textblock','box':(1084,762,1285,795),'xy':(1088,765),'text':'良渚博物院 · 展厅内景','size':18},
],
7:[
    {'kind':'textblock','box':(360,365,1325,505),'xy':(365,376),'text':'良渚代表的是国家文明的起源，也是「创造」「秩序」与「人类智慧」\n的闪光跃升。','size':42,'spacing':12},
],
8:[
    {'kind':'textblock','box':(180,295,775,386),'xy':(184,300),'text':'2023年，国家主席习近平在「一带一路」国际合作高峰论坛上宣布\n举办「良渚论坛」，并向首届论坛致贺信，使良渚上升\n为国家文化外交的核心名片。','size':24,'spacing':7},
    {'kind':'textblock','box':(940,376,1535,474),'xy':(944,383),'text':'二期工程总建筑面积约6.5万平方米，已列入重要建设计划。\n博物馆的物理扩容，标志着文化影响力的持续攀升。','size':24,'spacing':7},
    {'kind':'textblock','box':(184,390,760,595),'xy':(186,394),'text':'「良渚论坛」已成功举办三届，累计吸引全球115个国家和地区\n1300余名嘉宾参加，成为中华文明与世界文明交流互鉴的\n固定国家级对话机制。','size':24,'spacing':7},
],
9:[
    {'kind':'textblock','box':(82,80,1220,155),'xy':(86,92),'text':'市场热度飙升——从「文明遗产」到「文化现象」','size':58,'color':TITLE},
    {'kind':'textblock','box':(850,460,1170,520),'xy':(854,468),'text':'1000余家  产业集聚','size':37,'color':GOLD},
    {'kind':'textblock','box':(850,520,1465,625),'xy':(854,528),'text':'良渚文化大走廊已集聚规模以上企业1000余家，\n文化从业人数近5000人；中国（良渚）数字文化社区\n已吸引500多家企业入驻。','size':23,'spacing':7},
],
13:[
    {'kind':'textblock','box':(88,80,860,155),'xy':(92,94),'text':'市场现状：品牌的三重焦虑','size':58,'color':TITLE},
],
14:[
    {'kind':'textblock','box':(105,225,1385,315),'xy':(108,232),'text':'良渚代表的不只是中华民族屹立于世界之巅的「文明高度」，更是融入日常、延续千年的\n一套中国式的「生活哲学」。','size':36,'spacing':9},
    {'kind':'textblock','box':(1260,490,1415,545),'xy':(1265,498),'text':'东方色谱','size':36,'color':TITLE},
],
15:[
    {'kind':'textblock','box':(88,274,1410,355),'xy':(92,284),'text':'良渚先民用最凝练的直线与圆，创造了外方内圆的玉琮；以精准的阴刻线条，在玉石上刻下细如发丝的神人兽面纹。\n这是一种跨越时空、直抵现代设计内核的几何美学语言。它不喧哗，却有无声的惊雷。','size':25,'spacing':9},
],
17:[
    {'kind':'textblock','box':(86,80,990,155),'xy':(90,94),'text':'治愈时代焦虑的秩序感与田园梦','size':58,'color':TITLE},
],
20:[
    {'kind':'textblock','box':(90,345,710,480),'xy':(94,350),'text':'神人兽面纹、鸟立高台、黑陶罐神秘刻符……这些符号至今未被完全\n破译，构成了一套充满力量感、神秘感和秩序感的超级纹饰体系。\n它以神秘感和秩序感形成独特识别。','size':25,'spacing':8},
    {'kind':'textblock','box':(90,525,470,615),'xy':(94,532),'text':'它是年轻人愿意佩戴的文化符号，\n也是可以分享的身份徽章。','size':32,'spacing':10},
    {'kind':'textblock','box':(765,695,1040,744),'xy':(768,698),'text':'从神人兽面纹、鸟立高台等符号中\n提炼核心轮廓与秩序感','size':17,'spacing':3},
    {'kind':'textblock','box':(1030,700,1265,744),'xy':(1034,702),'text':'应用于包装、主视觉与空间\n可持续使用的设计元素','size':17,'spacing':3},
],
21:[
    {'kind':'textblock','box':(88,80,1020,155),'xy':(92,94),'text':'史前时代的系统工程与极致匠心','size':58,'color':TITLE},
    {'kind':'textblock','box':(910,420,1200,465),'xy':(914,424),'text':'1毫米/4–5条阴线','size':34,'color':GOLD},
    {'kind':'textblock','box':(910,465,1155,525),'xy':(914,468),'text':'玉器纹饰的雕刻精度——\n肉眼几乎不可辨识的史前微雕','size':18,'spacing':4},
    {'kind':'textblock','box':(610,645,1045,715),'xy':(614,652),'text':'提供「探索、创造、极致精准」的硬核精神背书，链接人类\n对未知和工艺极限的永恒追求。','size':22,'spacing':7},
    {'kind':'textblock','box':(1088,645,1535,715),'xy':(1092,652),'text':'提供关于「专注力」「系统工程」的早期案例，\n为知识内容提供高辨识度素材。','size':22,'spacing':7},
],
22:[
    {'kind':'textblock','box':(84,78,880,155),'xy':(88,92),'text':'一整套属于东方的色彩体系','size':58,'color':TITLE},
    {'kind':'textblock','box':(335,260,1245,340),'xy':(338,266),'text':'五千年的积淀，为我们留下了一个可直接取用的美学宝库。这里有独特的色彩体系：璧青、鸡骨白、抱玉朱、炭稻黑；\n有温润的玉石与古拙的黑陶。它们是一座开放、可持续挖掘的创作富矿，适配从顶级奢侈品到日常快消品的全品类设计需求。','size':22,'spacing':7},
    {'kind':'textblock','box':(1188,622,1260,650),'xy':(1191,626),'text':'#D8CBC0','size':13},
],
23:[
    {'kind':'textblock','box':(90,80,520,155),'xy':(94,94),'text':'良渚色彩系统','size':58,'color':TITLE},
    {'kind':'textblock','box':(88,460,760,530),'xy':(92,466),'text':'通过光谱分析、色彩测量等科学手段，从良渚玉器、陶器、漆器等文物中提取色彩数据，\n建立完整的良渚色彩体系。','size':23,'spacing':7},
],
25:[
    {'kind':'textblock','box':(80,78,880,155),'xy':(86,92),'text':'全场域 · 独一无二的品牌体验场','size':58,'color':TITLE},
    {'kind':'textblock','box':(88,208,540,240),'xy':(92,212),'text':'良渚博物院  由建筑大师大卫·奇普菲尔德设计','size':24},
    {'kind':'textblock','box':(822,494,960,525),'xy':(826,498),'text':'良渚艺创园 5000+㎡','size':18},
],
28:[
    {'kind':'textblock','box':(88,305,555,430),'xy':(92,314),'text':'以周大福高级珠宝线传承工艺打造联名产品，重磅上线\n周大福品牌荟馆店，实现文化与产品的双\n「传承」概念营销。','size':26,'spacing':10},
],
29:[
    {'kind':'textblock','box':(88,302,560,520),'xy':(92,310),'text':'围绕「产品—传播—体验」展开全面深度合作，打造\n「文、旅、酒」三维融合的文明溯源之旅。以文化战略\n联动文化IP资源、文化活动与文化产品，提升合作伙伴\n及消费者的品牌观感。','size':25,'spacing':9},
],
30:[
    {'kind':'textblock','box':(88,305,560,500),'xy':(92,314),'text':'携手在良渚古城遗址公园打造快闪体验空间，以\n「产品分区沉浸式体验」重构养生场景，将品牌用户、\n文化游客与新品发布深度串联。','size':25,'spacing':10},
],
35:[
    {'kind':'textblock','box':(1110,485,1535,610),'xy':(1114,494),'text':'品牌冠名或联合出品专题短片（「极简美学」「匠心精神」\n「远古密码」等主题），良渚全媒体矩阵联合推送。','size':23,'spacing':8},
],
36:[
    {'kind':'textblock','box':(520,470,670,525),'xy':(560,476),'text':'05','size':45,'color':TITLE},
],
}

for pg, ops in patches.items():
    patch_page(pg, ops)

# Assemble PDF from patched jpg pages
imgs=[]
for fp in sorted(glob.glob(f'{OUT}/page_*.jpg')):
    im=Image.open(fp).convert('RGB')
    imgs.append(im)
final=f'{PROJ}/deliverables/良渚IP授权介绍2026_直接修正版.pdf'
imgs[0].save(final, save_all=True, append_images=imgs[1:], resolution=144.0)
print(final)
print(len(imgs))
