""" 统一两张截图宽度后进行像素级对比。 H5 截图: 1290px 宽 (430×3 DPR) 小程序截图: 宽度待检测,缩放到 1290px 后对比 """ import sys from pathlib import Path from PIL import Image SCREENSHOTS_DIR = Path(__file__).resolve().parents[2] / "docs" / "h5_ui" / "screenshots" TARGET_WIDTH = 1290 # H5 截图宽度 def get_image_info(path: Path) -> dict: img = Image.open(path) return {"width": img.width, "height": img.height, "path": str(path)} def resize_to_width(src: Path, dst: Path, target_width: int) -> dict: """等比缩放到目标宽度""" img = Image.open(src) if img.width == target_width: img.save(dst) return {"width": img.width, "height": img.height, "scaled": False} ratio = target_width / img.width new_height = int(img.height * ratio) resized = img.resize((target_width, new_height), Image.LANCZOS) resized.save(dst) return {"width": target_width, "height": new_height, "scaled": True, "ratio": ratio} def crop_to_same_height(img1_path: Path, img2_path: Path): """裁剪两张图到相同高度(取较小值)""" img1 = Image.open(img1_path) img2 = Image.open(img2_path) min_h = min(img1.height, img2.height) if img1.height != min_h: img1.crop((0, 0, img1.width, min_h)).save(img1_path) if img2.height != min_h: img2.crop((0, 0, img2.width, min_h)).save(img2_path) return min_h def main(): h5_path = SCREENSHOTS_DIR / "board-finance.png" mp_path = SCREENSHOTS_DIR / "mp-board-finance.png" # 检查文件存在 for p in [h5_path, mp_path]: if not p.exists(): print(f"❌ 文件不存在: {p}") sys.exit(1) # 获取尺寸信息 h5_info = get_image_info(h5_path) mp_info = get_image_info(mp_path) print(f"H5 截图: {h5_info['width']}×{h5_info['height']}") print(f"小程序截图: {mp_info['width']}×{mp_info['height']}") # 缩放小程序截图到 H5 宽度 mp_resized_path = SCREENSHOTS_DIR / "mp-board-finance--resized.png" result = resize_to_width(mp_path, mp_resized_path, TARGET_WIDTH) print(f"\n缩放后小程序截图: {result['width']}×{result['height']}") if result.get('scaled'): print(f" 缩放比例: {result['ratio']:.4f}") # H5 也复制一份(确保宽度一致) h5_resized_path = SCREENSHOTS_DIR / "h5-board-finance--resized.png" h5_result = resize_to_width(h5_path, h5_resized_path, TARGET_WIDTH) print(f"H5 截图确认: {h5_result['width']}×{h5_result['height']}") # 裁剪到相同高度 min_h = crop_to_same_height(h5_resized_path, mp_resized_path) print(f"\n统一高度: {min_h}px(取较小值)") print(f"\n✅ 准备完成,可用 image-compare 对比:") print(f" 图1: {h5_resized_path}") print(f" 图2: {mp_resized_path}") if __name__ == "__main__": main()