INNER CODE UNIT · Python
build_svg
unitedrhino/things · scripts/generate-energy-demo-svg.py:78
def build_svg(demo: Demo, frames: list[Path], width: int, height: int, output: Path) -> None:
"""build_svg 使用 SMIL 离散切帧;不支持动画时只显示第一帧。"""
frame_seconds = 1 / FRAME_RATE
visible_until = frame_seconds / demo.duration
lines = [
'<?xml version="1.0" encoding="UTF-8"?>',
f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {width} {height}" role="img" aria-label="智慧能源数字孪生演示">',
f' <rect width="{width}" height="{height}" fill="#0b1725"/>',
]
for index, frame in enumerate(frames):
encoded = base64.b64encode(frame.read_bytes()).decode("ascii")
base_visibility = "visible" if index == 0 else "hidden"
begin = index * frame_seconds
lines.extend(
[
f' <image width="{width}" height="{height}" visibility="{base_visibility}" href="data:image/jpeg;base64,{encoded}">',
(