1 个不稳定发布
0.0.1-alpha.3 | 2021 年 9 月 20 日 |
---|
#35 in #palette
25KB
296 行
ImageGoNord
这个库是 Schrodinger-Hat/ImageGoNord 的 Rust 版本,旨在更高效、更便携。它建立在许多流行的 Rust 库之上,例如 image
。本文档中列出的大多数功能仍在开发中,但该项目计划公开一个本地的 Rust 库和 CLI 应用程序,以及 WASM/JS、Python 和 C/C++ 的绑定,希望通过 JNI 允许更多平台访问,并通过 Python 绑定将它们集成回原始 ImageGoNord Python 库。
这个库非常适合通过多线程进行快速本地应用程序,通过 Webassembly 在浏览器中进行转换,以及自托管的云原生/无服务器或容器化转换 Web API。
如果此项目的许可证有问题,请提出问题或提交 PR。我并不擅长管理开源许可证,因此可能存在问题。感谢您的理解。
使用方法
API
ImageGoNord 可以使用几种算法将给定的图像转换为 Nord 颜色方案。这些算法由 Options
类型控制。
库中的主要函数是 convert
,它接受一个图像、一些选项和调色板,并返回一个符合调色板定义的颜色方案的图像。
CLI(进行中)
尚未实现。
环境
Rust
使用 Rust 的库就像添加一个包并使用 convert
函数一样简单。
$ cargo add image-go-nord
Updating 'https://github.com/rust-lang/crates.io-index' index
Adding image-go-nord v0.1.0 to dependencies
或者手动将其添加到您的 Cargo.toml
。
[dependencies]
image-go-nord = "0.1"
状态
大部分Rust移植正在进行中,但缺少许多关键组件。
Webassembly/JavaScript(进行中)
启用wasm-bindgen
功能会将Rust库暴露给WASM友好的接口。这个库与wasm-pack
兼容,因此您可以使用wasm-pack
生成npm包,包括TypeScript类型和JS粘合代码。
$ wasm-pack build -- --features wasm-bindgen
您还可以启用wee_alloc
功能,使用一个更小但更慢的全局分配器。这可以有助于减小生成的wasm文件的大小,但可能会降低性能。
您还可以启用serde
和serde_json
功能,允许从JSON序列化转换选项和调色板。这在设计node.js中的web API时非常有用,例如,可以消除在传递给库之前反序列化用户输入的需要。
状态
所有功能目前都在正常工作,但还没有专门的接口。请查看wasm
分支和src/wasm
目录以了解进展。
C/C++/Cython绑定(进行中)
启用ffi
功能将导出C兼容函数到crate根目录。您可以将库构建为cdylib
或staticlib
来创建用于其他语言和环境的共享库。尽管有方法可以通过命令行传递此选项,但直接在Cargo.toml
中添加crate-type
条目更容易。
[lib]
crate-type = ["cdylib", "staticlib"]
在Linux上构建时,这将生成libimage_go_nord.so
和libimage_go_nord.a
。然后可以从其他语言加载这些库。
您可以使用cbindgen
生成Rust库的C、C++、Cython以及其他需要C绑定的语言的绑定,例如Swift和Objective-C。您可以在crate根目录中放置一个cbindgen.toml
配置文件或使用CLI标志来自定义输出。
$ cbindgen --lang c --crate image-go-nord --output ImageGoNord.h
状态
仍在解决使用条件编译生成绑定的难题。
尚未开始对ffi模块的工作。
Python(进行中)
启用pyo3
功能以生成本机Python 3模块。您必须将库构建为cdylib
,并使用maturin或setuptools-rust来构建Python模块。请参阅pyo3
文档了解详细信息。
此功能计划中,但尚未实现。
依赖关系
~16MB
~104K SLoC