feat: 沙香科技官网 v2.2 基线(深色科技风/双语/局域网+公网双部署)
This commit is contained in:
50
tools/process_new_assets.py
Normal file
50
tools/process_new_assets.py
Normal file
@@ -0,0 +1,50 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
处理用户补充的新素材(assets/img 内):
|
||||
- 7 张透明底产品图 p-*:无损 WebP 保留 alpha(已是镂空,无需再处理)
|
||||
- p-hs01 背景复杂不透明:有损压缩(页面走 framed 描边容器)
|
||||
- 12 张照片 JPG:有损 WebP(宽度 >1600 的缩到 1600)
|
||||
- qr-wechat.png 二维码:不处理,HTML 直接引用原 PNG
|
||||
原图不删除(用户提供的源文件)。用法: uv run --with pillow python3 tools/process_new_assets.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image
|
||||
|
||||
IMG = Path('assets/img')
|
||||
|
||||
# 已检测为真透明的产品图(透明像素 37%~88%)
|
||||
ALPHA_PRODUCTS = [
|
||||
'p-bb03.png', 'p-bg01.png', 'p-sg03.png', 'p-sg03mini.png',
|
||||
'p-sl01.png', 'p-st01.png', 'p-st02.png',
|
||||
]
|
||||
# 有损压缩的照片/截图
|
||||
PHOTOS = [
|
||||
'p-hs01.png', # 背景复杂不透明,同照片处理
|
||||
'ai-agent.jpg', 'app-livestock.jpg', 'building.jpg', 'cctv.jpg',
|
||||
'digital-twin.jpg', 'factory-line.jpg', 'factory.jpg', 'goat.jpg',
|
||||
'hero-grazing.jpg', 'hydro-class.jpg', 'liangchang.jpg',
|
||||
'machine-install.jpg', 'platform-asset.jpg', 'platform-hydro.jpg',
|
||||
'platform-pasture.jpg',
|
||||
]
|
||||
|
||||
for name in ALPHA_PRODUCTS:
|
||||
src = IMG / name
|
||||
dst = IMG / (name[:-4] + '.webp')
|
||||
im = Image.open(src).convert('RGBA')
|
||||
# 自检:透明像素占比必须显著,否则说明误判为透明图
|
||||
trans = sum(1 for p in im.getdata() if p[3] < 250) / (im.width * im.height)
|
||||
assert trans > 0.2, f'{name} 透明像素仅 {trans:.0%},不符合透明底预期'
|
||||
im.save(dst, 'WEBP', lossless=True, method=6)
|
||||
print(f'{name:18s} -> {dst.name:22s} 透明{trans:.0%} {dst.stat().st_size // 1024}KB')
|
||||
|
||||
for name in PHOTOS:
|
||||
src = IMG / name
|
||||
dst = IMG / (name[:-4] + '.webp')
|
||||
im = Image.open(src).convert('RGB')
|
||||
if im.width > 1600:
|
||||
im = im.resize((1600, round(im.height * 1600 / im.width)), Image.LANCZOS)
|
||||
im.save(dst, 'WEBP', quality=82, method=6)
|
||||
print(f'{name:18s} -> {dst.name:22s} {im.width}x{im.height} {dst.stat().st_size // 1024}KB')
|
||||
|
||||
print('完成')
|
||||
Reference in New Issue
Block a user