Files
Neo-ZQYY/scripts/ops/analyze_diff.py

56 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
分析 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()