为什么不会包浆?同类工具每点一次按钮都会把画布重新编码一次(JPEG 有损),误差逐轮叠加。
这里把像素留在内存(一份 Uint8ClampedArray),显示用 putImageData 直接贴图,
只有点「下载」时才编码一次。
顺序表怎么算?一次编码 = 沿曲线后移 L 位,所以正向 k 次 = k·L、
反向 = −k·L;整张表等价于一次 (Σ表项)·L 的旋转,展开 27 步也只重排一次。
三种模式?compat(兼容模式)用 round(φ⁻¹·N) 取整,
只有单次编码(单轮、不带表)才与采用同一取整规则的实现一键互解;
多轮或按表之后,外部实现仍能解,但只能手动按对方向重复净步数次,容易点错。
int(整数模式)用 (N×618)/1000,全程整数、跨平台确定,
但与兼容模式不互通。
custom(自定义模式)直接手填 L,用来复现别的实现的位移或做实验;
L 必须是整数且 0 ≤ L < 像素总数,越界直接报错、不自动取模。
为什么优先用 CLI?批处理、大图、自动化都更适合命令行:ci/cli.mjs(Node)和
ci/py/gilbert_cli.py(Python)无头、零三方依赖、PNG 进 PNG 出。浏览器里没有 Node / Python
运行时,所以本页面只是可选 GUI。两者共用同一套算法,产物逐字节互通
(页面混淆可以 CLI 解开,或反过来)。