微信小程序页面迁移校验之前 P5任务处理之前
This commit is contained in:
55
scripts/ops/analyze_diff.py
Normal file
55
scripts/ops/analyze_diff.py
Normal file
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
分析 diff 图的像素差异分布,按纵向区域统计差异密度。
|
||||
输出每 50px 逻辑高度段的差异百分比,帮助定位需要调整的区域。
|
||||
"""
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
import struct
|
||||
|
||||
SCREENSHOTS_DIR = Path(__file__).resolve().parents[2] / "docs" / "h5_ui" / "screenshots"
|
||||
|
||||
def analyze_diff_image(diff_path: Path, band_height: int = 150):
|
||||
"""按纵向条带分析 diff 图的红色像素密度"""
|
||||
img = Image.open(diff_path).convert("RGB")
|
||||
w, h = img.size
|
||||
pixels = img.load()
|
||||
|
||||
print(f"Diff 图尺寸: {w}×{h}")
|
||||
print(f"条带高度: {band_height}px (逻辑 {band_height/3:.0f}px)")
|
||||
print(f"{'区域':>8} {'逻辑Y':>8} {'差异像素':>10} {'总像素':>10} {'差异%':>8} {'条形图'}")
|
||||
print("-" * 80)
|
||||
|
||||
bands = []
|
||||
for y_start in range(0, h, band_height):
|
||||
y_end = min(y_start + band_height, h)
|
||||
diff_count = 0
|
||||
total = 0
|
||||
for y in range(y_start, y_end):
|
||||
for x in range(w):
|
||||
r, g, b = pixels[x, y]
|
||||
total += 1
|
||||
# diff 图中红色/品红色像素表示差异
|
||||
if r > 200 and g < 100:
|
||||
diff_count += 1
|
||||
pct = (diff_count / total * 100) if total > 0 else 0
|
||||
bar = "█" * int(pct / 2)
|
||||
logical_y = y_start / 3
|
||||
print(f"{y_start:>6}-{y_end:<6} {logical_y:>6.0f}px {diff_count:>10,} {total:>10,} {pct:>7.1f}% {bar}")
|
||||
bands.append({"y_start": y_start, "y_end": y_end, "diff_pct": pct})
|
||||
|
||||
# 找出差异最大的区域
|
||||
top_bands = sorted(bands, key=lambda b: b["diff_pct"], reverse=True)[:5]
|
||||
print(f"\n差异最大的 5 个区域:")
|
||||
for b in top_bands:
|
||||
logical_y = b["y_start"] / 3
|
||||
print(f" 逻辑 Y={logical_y:.0f}px: {b['diff_pct']:.1f}%")
|
||||
|
||||
def main():
|
||||
diff_path = SCREENSHOTS_DIR / "diff-board-finance-v2.png"
|
||||
if not diff_path.exists():
|
||||
print(f"❌ diff 图不存在: {diff_path}")
|
||||
return
|
||||
analyze_diff_image(diff_path, band_height=150)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user