扩展库 / imagehash
imagehash
图片相似性指纹。
依赖 stb_image 与 stb_image_resize2,不重复捆绑 stb;UTF-8 路径由 XRT 处理。
2026-10-30:补首次 C 调用/内存平衡、冷 XLang JIT/AOT,以及 20 张图的 60 个哈希和 20 个距离的独立整数定义参照。八个实际生成原型与拥有型返回负例、新图片候选筛选双语范例通过;Windows 默认 246 项符合预期,Linux 原生 ASan/UBSan 与完整默认门禁通过,各 11 份独立 AOT 程序。未确认新的算法 BUG,未修改生产算法、ABI、stb 或 XRT;参照使用被测依赖的缩放像素,不扩大为任意图片或缩放器认证。
2026-10-28:三条完整公开返回链不再复制哈希结果,保留独立图片错误诊断与内存错误。固定 PNG 的 C/XLang 各六组预算、空路径/缺失图片/NUL 反例、双平台默认门禁与双语 JIT/AOT 通过;Linux ASan/UBSan 完整图像链路和普通构建预算分别验收,未关闭 stb 的 sanitizer 保护。仍有一次路径 NUL 针串分配和长度扫描,不称整条操作零开销。
API
| 接口 | 用途 |
|---|---|
ahash / dhash / phash | 生成 64 位图像指纹 |
hamming | 计算同类指纹间的位差 |
valid | 检验 16 位十六进制格式 |
范例
import imagehash
string a = imagehash.phash("photo.png")
string b = imagehash.phash("thumbnail.png")
println(imagehash.hamming(a, b))
包内 examples/similarity.xl 与 similarity_c.c 提供同功能图片候选筛选,默认输出、同图和首图缺失均由门禁验证。阈值仅供业务选择,不是图片身份或安全性证明;C 结果用 xrtFree 释放,XLang 自动接管。
不是密码学哈希;不同算法的结果不可互比。图片缺失或损坏抛 RuntimeError,内存不足抛 MemoryError;C 接口失败返回 NULL,可查询线程局部诊断与 XRT 内存错误。五个操作入口会清除旧 XRT 错误,普通格式/图片错误不会误报为上次内存故障。当前 Windows/Linux 默认门禁均通过固定图像向量、线程与分配故障、C/XLang 双语输出及核心/分配故障/公开范例独立 EXE;Linux 另通过 C ASan/UBSan。旧共享缺符号仅属历史发布物;-SkipAot 只作 Windows 聚焦快测。C 接口、资源归属及算法范围见包内 README。