from __future__ import annotations import io import numpy as np from PIL import Image def depth_to_png16_bytes(depth: np.ndarray) -> bytes: depth = np.asarray(depth, dtype=np.float32) dmin = float(depth.min()) dmax = float(depth.max()) if dmax > dmin: norm = (depth - dmin) / (dmax - dmin) else: norm = np.zeros_like(depth, dtype=np.float32) # 前后端约定:最远=255,最近=0(8-bit) u8 = ((1.0 - norm) * 255.0).clip(0, 255).astype(np.uint8) img = Image.fromarray(u8, mode="L") buf = io.BytesIO() img.save(buf, format="PNG") return buf.getvalue()