1 个不稳定发布

0.0.1-alpha.32021 年 9 月 20 日

#35 in #palette

MIT 许可证

25KB
296

ImageGoNord

这个库是 Schrodinger-Hat/ImageGoNord 的 Rust 版本,旨在更高效、更便携。它建立在许多流行的 Rust 库之上,例如 image。本文档中列出的大多数功能仍在开发中,但该项目计划公开一个本地的 Rust 库和 CLI 应用程序,以及 WASM/JS、Python 和 C/C++ 的绑定,希望通过 JNI 允许更多平台访问,并通过 Python 绑定将它们集成回原始 ImageGoNord Python 库。

CI docs.rs Crates.io GitHub 发布 (最新 SemVer) 文档

这个库非常适合通过多线程进行快速本地应用程序,通过 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文件的大小,但可能会降低性能。

您还可以启用serdeserde_json功能,允许从JSON序列化转换选项和调色板。这在设计node.js中的web API时非常有用,例如,可以消除在传递给库之前反序列化用户输入的需要。

状态

所有功能目前都在正常工作,但还没有专门的接口。请查看wasm分支和src/wasm目录以了解进展。

C/C++/Cython绑定(进行中)

启用ffi功能将导出C兼容函数到crate根目录。您可以将库构建为cdylibstaticlib来创建用于其他语言和环境的共享库。尽管有方法可以通过命令行传递此选项,但直接在Cargo.toml中添加crate-type条目更容易。

[lib]
crate-type = ["cdylib", "staticlib"]

在Linux上构建时,这将生成libimage_go_nord.solibimage_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,并使用maturinsetuptools-rust来构建Python模块。请参阅pyo3文档了解详细信息。

此功能计划中,但尚未实现。

依赖关系

~16MB
~104K SLoC