16个稳定版本
4.3.3 | 2024年8月5日 |
---|---|
4.3.1 | 2024年4月27日 |
4.3.0 | 2024年1月22日 |
4.2.2 | 2023年10月13日 |
2.3.3 |
|
在图像类别的第14位
每月下载量11,261次
在23个crate(14个直接使用)中使用
170KB
3.5K SLoC
libimagequant — 图像量化库
Imagequant库将RGBA图像转换为基于调色板的8位索引图像,包括alpha组件。它非常适合生成小型PNG图像和美观的GIF。
库本身不处理图像编码/解码,请使用自己的编码器。如果您正在寻找命令行工具,请参阅pngquant。
C语言入门
此库可以通过imagequant-sys Rust包在C程序中使用。
rustup update
git clone https://github.com/ImageOptim/libimagequant
cd imagequant-sys
cargo build --release
# makes target/release/libimagequant_sys.a
有关更多详细信息,请参阅C库文档。
Rust语言入门
添加到Cargo.toml
rustup update
cargo add imagequant
许可证
Libimagequant双授权
- 对于免费/开源软件,它可在GPL v3或更高版本下使用,并附加了版权声明,原因在于历史原因。
- 对于用于闭源软件、AppStore分发和其他非GPL用途,您可以获取商业许可证。如果您需要,请随时[email protected]询问详细信息以及定制授权条款。
升级说明
libimagequant v2曾经是一个C库。libimagequant v4完全用Rust编写,但仍为C程序导出相同的C接口。您需要安装Rust 1.70+来构建它,并调整您的构建命令。如果您不想升级,您可以在仓库的2.x
分支中使用库的C版本。
C静态库用户
C/C++ 的文件现在位于 imagequant-sys/
子目录中,而不是仓库的根目录。现在不再有 configure && make
命令了。
要构建库,请通过 rustup 安装 Rust,然后运行
rustup update
cd imagequant-sys
cargo build --release
它将生成 target/release/libimagequant_sys.a
静态库。API、ABI 和头文件保持不变,因此其他一切应该工作正常。如果你正在为 macOS 或 iOS 构建,请查看包含的 xcodeproj 文件(将其添加为 子项目)。
如果你正在为 Android 构建,请运行 rustup target add aarch64-linux-android; cargo build --release --target aarch64-linux-android
并使用 target/aarch64-linux-android/release/libimagequant_sys.a
。对于跨编译到其他平台也是一样。请参阅 rustup target list
。
为软件包维护者提供的 C 动态库
如果你是应用程序开发者,请使用上面的静态链接选项——该选项更容易使用,并生成更小的可执行文件。
该库的 API 和 ABI 保持不变。它具有相同的 sover,因此它可以作为先前 C 版本的直接替换。
该库现在是典型的 Rust/Cargo 库。如果你想设置 离线构建 或 覆盖依赖项,它与每个其他 Rust 项目的工作方式相同。请参阅 Cargo 文档,例如 cargo fetch
或 cargo vendor
(但我不建议使用 vendoring)。
如果你想构建动态库,但不介意 soname 和 rpath 出错,请修改 imagequant-sys/Cargo.toml
并将 "cdylib"
添加到现有的 crate-type
属性中,然后 cargo build --release
将执行它通常的半成品工作并构建 target/release/libimagequant.{so,dylib,dll}
。
使用 make
构建
configure && make
命令已消失。我希望我只需将静态库包装起来就可以构建动态库,但显然不行,因此我无法轻松地重新创建旧的 make install
。我希望有一个比使用 cargo-c
工具更标准、更轻量级的解决方案,所以如果你擅长处理链接器标志和符号可见性,请发送拉取请求。
使用 cargo-c
构建
工具 cargo-c
知道如何正确构建和链接 so/dylib,并生成准确的 pkg-config 文件,因此对于系统范围内正确安装动态库实际上是必需的。
rustup update
cd imagequant-sys
cargo install cargo-c
cargo cinstall --prefix=/usr/local --destdir=.
这使得 Rust 1.70 和 cargo-c
包成为构建时的依赖项。没有运行时依赖(除了 Cargo 内部的依赖)。OpenMP 已经完全删除。
与 pngquant 的交互
pngquant v2 可以将此库作为动态库使用。然而,pngquant v4 不支持解包。它通过其 Rust 原生接口将其作为 Cargo 依赖项使用。共享 libimagequant 库仅导出 C 程序的稳定 ABI,而这个接口对于 Rust 程序来说没有用。
为 Rust 用户升级
如果您使用过 imagequant-sys
包,请切换到更高级的 imagequant
包。imagequant
v4 几乎完全向后兼容,只有一些小的更改(例如,将 c_int
的使用更改为 u32
),Rust 编译器会指出这些更改。请参阅 文档。请修复您可能收到的任何弃用警告,因为弃用的函数将被删除。
将 openmp
Cargo 功能已重命名为 threads
。
.new_image()
现在可以对其参数拥有所有权,以避免复制。如果您遇到错误,表明 From<&Vec<RGBA>>
未实现,则要么不要通过引用传递(移动、避免复制),要么在该参数上调用 .as_slice()
(以复制像素),或者使用 .new_image_borrowed()
方法。
线程支持与 WASM
默认情况下,当启用 threads
Cargo 功能时,此库使用多线程。可以通过 RAYON_NUM_THREADS
环境变量控制线程数量。
WASM 中的线程是实验性的,并且需要 特殊处理。如果您针对 WASM,您可能想要禁用线程。
要使用此库作为依赖项时禁用线程,请在 Cargo.toml
中禁用默认功能,如下所示
[dependencies]
imagequant = { version = "4.0", default-features = false }
当您直接编译库时,请添加 --no-default-features
标志。
依赖项
~350–670KB
~12K SLoC