MoonBit image library: pure MoonBit backend for native/wasm-gc/js/wasm multi-target support.
详细说明(版本映射、格式检测、多目标、核心约束)见 docs/notes.md。
| 特性 | 说明 | |
|---|---|---|
| 🟢 | 零 C 依赖 | 全部纯 MoonBit 实现,无需 C 编译器,部署极简 |
| 🟢 | 四目标支持 | native / wasm-gc / js / wasm 共用同一代码库,无条件编译 |
| 🟢 | 格式覆盖广 | PNG / JPEG / BMP / GIF / QOI / TGA / PSD / HDR / PNM / TIFF / ICO / CUR / ICNS / APNG / WebP / AVIF / HEIF / JPEG-XL — 含独家 PSD、HDR |
| 🟢 | 像素深度全 | 8 位 Image、16 位 Image16、HDR 浮点 ImageF |
| 🟢 | 1338 个 API | 从基础 I/O 到 FFT、Canny、分水岭、SLIC、ORB、SIFT、SIFT 匹配、RANSAC 单应性、grabCut、流式解码、光流、模板匹配、WebP lossy 编解码、OCR 全链路(数字/英文/中文/表格/手写体/多语言混合)等高级算法 |
| 🟢 | OCR 全链路 | 预处理→文本检测→字符分割→特征提取→分类器→数字/英文/中文OCR→表格识别→后处理→文档理解→手写体→多语言混合,36 个模块文件 |
| 🟢 | 流式解码 | 逐行 / 分块 / 指定通道回调(当前为全量解码后逐行分发,v5.0 计划增量解码) |
| 🟢 | 安全加固 | MAX_IMAGE_DIMENSION(65535) 维度守卫 + check_dims 全解码器入口校验 + safe_mul 溢出保护 |
| 🟢 | 多子包架构 | 100+ 个子包职责清晰,编译并行化,可独立测试 |
| 格式 | 解码 | 编码 | 备注 |
|---|---|---|---|
| PNG | ✅ | ✅ | 8/16-bit,Adam7 隔行扫描 |
| JPEG | ✅ | ✅ | baseline,可调质量 |
| BMP | ✅ | ✅ | 1/4/8/16/24/32-bit |
| GIF | ✅ | ✅ | 动画 GIF 解码/编码 |
| QOI | ✅ | ✅ | Quite OK Image |
| TGA | ✅ | ✅ | 含 RLE |
| PSD | ✅ | — | Photoshop 文档(独家) |
| HDR | ✅ | ✅ | IEEE 754 浮点(独家) |
| PNM | ✅ | ✅ | PPM / PGM |
| TIFF | ✅ | ✅ | 解码仅支持无压缩(LZW/PackBits/Deflate 尚未实现) |
| ICO | ✅ | ✅ | 单尺寸/多尺寸 |
| CUR | ✅ | ✅ | Windows 光标 |
| ICNS | ✅ | ✅ | macOS 图标 |
| APNG | ✅ | ✅ | 动画 PNG |
| WebP | ✅ (lossless) | ✅ (lossy VP8) | lossless (VP8L) 解码 + lossy (VP8) 编码;注意:lossy 编码结果不可被本库解码 |
| AVIF | ✅ | — | AV1 关键帧解码 |
| HEIF | ✅ | — | AV1/HEIC 解码 |
| JPEG-XL | ✅ | — | 基础解码 |
moon add walkzzz/image// 从字节解码
let img : Image = load_from_bytes(png_bytes)
println("width=\{img.width}, height=\{img.height}, channels=\{img.channels}")
// 编码为 PNG 字节
let out : Bytes = write_png_to_bytes(img)
// 缩放(7 种滤波器 × 4 种边缘模式)
let resized : Image = resize(img, 128, 128)
// 自动检测格式并解码
let any : Image = decode_any(data, req_channels=Some(3))
// 加载动画 GIF
let anim : GifAnimation = load_gif_from_bytes(gif_bytes)
println("frames=\{anim.frames.length()}, delays=\{anim.delays}")
// 查询图像信息(不解码像素)
let info : ImageInfo? = info_from_bytes(data)
// 流式解码:逐行回调(当前为全量解码后逐行分发)
decode_stream(data, fn(row, y) {
// 处理第 y 行像素 row : Array[Array[Int]]
})try {
let img = load_from_bytes(data)
} catch {
LoadError::FileIO(msg) => println("文件IO错误: \{msg}")
LoadError::DecodeFailed(msg) => println("解码失败: \{msg}")
LoadError::UnsupportedFormat(msg) => println("不支持的格式: \{msg}")
}// 检测 SIFT 特征
let kp1 = sift_detect(img1)
let kp2 = sift_detect(img2)
// L2 距离 + Lowe 比率测试匹配
let matches = sift_match(kp1, kp2, ratio_threshold=0.75)
// RANSAC 鲁棒单应性估计
let homography = ransac_homography(matches, threshold=5.0, iterations=1000)| 模块 | 功能 | 版本 |
|---|---|---|
| 预处理 | Sauvola/Niblack/Otsu 二值化、文档增强、倾斜校正、版面分析 | v7.0 |
| 文本检测 | 连通域分析、投影分析、文本行检测、字符分割 | v7.1 |
| 字符分割 | 滴水算法、粘连字符检测、连通域分割、后处理 | v7.2 |
| 特征提取 | HOG、LBP、投影特征、网格特征、统计特征、组合特征 | v7.3 |
| 分类器 | KNN、模板匹配、4种距离度量、特征归一化/标准化 | v7.4 |
| 数字 OCR | 0-9 数字识别、7段显示模板 | v7.5 |
| 英文 OCR | 数字+大写字母+小写字母、36+字符模板 | v8.0 |
| 后处理 | 词典匹配、N-gram 语言模型、拼写纠错、混淆字符纠错 | v8.1 |
| 中文 OCR | 100 常用字基础、500+ 常用字完善、部件分解 | v8.2/v9.0 |
| 表格识别 | 表格线检测、结构分析、单元格提取 | v8.3 |
| 准确率提升 | Hu 矩、训练数据管理、特征增广、集成学习 | v9.1 |
| 文档理解 | 版面分析、阅读顺序、标题正文分类、14种元素类型 | v9.2 |
| 手写体识别 | 多变体模板、灵活分割、倾斜校正、多变体投票 | v9.3 |
| 多语言混合 | 语言检测、中英混排、50+标点模板、自动语言检测 | v9.4 |
| 目标 | 后端 | 测试 | 状态 |
|---|---|---|---|
| native | 纯 MoonBit | 3378 | ✅ |
| wasm-gc | 纯 MoonBit | 3378 | ✅ |
| js | 纯 MoonBit | 3378 | ✅ |
| wasm | 纯 MoonBit | 3378 | ✅ |
src/
├── types/ # 全目标类型 (Image, Image16, ImageF, LoadError 等)
├── pure/ # 纯 MoonBit 后端 (无 C FFI)
│ ├── codec/ # 格式编解码 (18 种格式)
│ ├── color/ # 颜色操作
│ └── util/ # 工具
├── lib/ # 高层封装 (自动格式分派)
├── meta/ # 元数据 (EXIF, PNG meta)
├── process/ # 高级图像处理算法 (90 子包)
│ ├── color/ # 色彩转换/调整/CLAHE/自适应阈值/Retinex/去雾
│ ├── edge/ # 边缘检测/Canny/霍夫/轮廓
│ ├── feature/ # 特征检测: Harris/ORB/SIFT/模板匹配/光流/GLCM/LBP
│ ├── filter/ # 滤波/去噪/图像修复
│ ├── frequency/ # FFT/DCT/Haar 小波/频率滤波
│ ├── segment/ # 分水岭/SLIC/grabCut/形态学/连通域
│ ├── transform/ # 几何变换/透视/Seam Carving/金字塔
│ └── ocr/ # OCR 全链路 (19 个模块)
│ ├── 预处理 # binarization/document_enhance/deskew/layout_analysis
│ ├── 检测分割 # connected_components/projection_analysis/char_segmentation
│ ├── 特征分类 # feature_extraction/classifier
│ ├── 识别引擎 # digit_ocr/english_ocr/chinese_ocr/advanced_chinese_ocr
│ ├── 后处理 # postprocess/table_recognition/document_understanding
│ └── 扩展 # ocr_accuracy/handwriting_ocr/multilingual_ocr
├── examples/ # 示例代码 (32 个示例,覆盖全部 API)
├── util/ # 工具函数 (基于 pure 的上层封装)
├── bench.mbt # 性能基准测试
└── reexport.mbt # 顶层 API re-export (1338 pub fn + 491 pub type)| 文档 | 说明 |
|---|---|
| docs/architecture.md | 架构图、包依赖关系、设计决策 |
| docs/api_reference.md | 完整 API 参考(1338 函数 + 491 类型) |
| docs/roadmap.md | 迭代路线图 |
| docs/comparison.md | mooncakes.io 图像库对比 |
| docs/performance_report.md | 性能基准报告(46 项基准) |
| docs/notes.md | 使用说明与核心约束 |
| docs/examples.md | 完整示例集(32 个示例) |
| docs/features.md | 功能一览(1338 API 分类概览) |
| docs/contributing.md | 贡献指南(开发环境/流程/规范) |
| docs/skill.md | AI 辅助开发技能描述 |
| docs/changelog.md | 版本变更历史 |
# 编译检查(四目标)
moon check
moon check --target wasm-gc
moon check --target js
moon check --target wasm
# 运行测试(3378 × 4 目标)
moon test --target native
moon test --target wasm-gc
moon test --target js
moon test --target wasm
# 运行性能基准测试
moon run --target native
# 重新生成 API 接口
moon info| 属性 | 值 |
|---|---|
| 原项目 | stb — stb_image.h |
| 原作者 | Sean Barrett (@nothings) |
| 原许可证 | MIT / Public Domain |
| 原语言 | C (单头文件库) |
| 移植目标 | MoonBit (纯语言,零 C FFI) |
| 方面 | stb_image.h | 本项目 |
|---|---|---|
| 语言 | C | MoonBit |
| 依赖 | C 编译器 | 零 C 依赖 |
| 目标 | native | native / wasm-gc / js / wasm |
| 格式数 | 7 | 18 |
| API 数 | ~30 | 1338 |
| 高级算法 | 无 | 90+ 子包 |
| 内存安全 | 手动 | GC 管理 |
Install
Download zipMoonBit image library: pure MoonBit backend for native/wasm-gc/js/wasm multi-target support.