"""Sanity check image sizes and svg viewboxes.""" from PIL import Image from pathlib import Path from lxml import etree def _check_image(base_dir, image_dir): assert image_dir.is_dir() expected_size = (int(image_dir.name), int(image_dir.name)) num_bad = 0 num_good = 0 for image_file in image_dir.iterdir(): with Image.open(image_file) as image: actual_size = image.size if expected_size != actual_size: print(f"bad_dim {image_file.relative_to(base_dir)} actual {actual_size} expected {expected_size}") num_bad += 1 else: num_good += 1 return num_bad, num_good def _check_svg(base_dir, svg_dir): expected_viewbox = (0.0, 0.0, 128.0, 128.0) num_bad = 0 num_good = 0 for svg_file in svg_dir.iterdir(): if not svg_file.name.startswith("emoji_u"): continue assert svg_file.is_file() with open(svg_file) as f: actual_viewbox = etree.parse(f).getroot().attrib["viewBox"] actual_viewbox = tuple(float(s) for s in actual_viewbox.split(" ")) if expected_viewbox != actual_viewbox: print(f"bad_dim {svg_file.relative_to(base_dir)} actual {actual_viewbox} expected {expected_viewbox}") num_bad += 1 else: num_good += 1 return num_bad, num_good def main(): base_dir = Path(__file__).parent image_dir = base_dir / "png" svg_dir = base_dir / "svg" assert image_dir.is_dir() assert svg_dir.is_dir() for size_dir in image_dir.iterdir(): num_bad, num_good = _check_image(base_dir, size_dir) print(f"{num_bad}/{num_bad+num_good} issues with {size_dir}") num_bad, num_good = _check_svg(base_dir, svg_dir) print(f"{num_bad}/{num_bad+num_good} issues with {svg_dir}") if __name__ == "__main__": main()