7个版本 (1个稳定版)
1.0.0 | 2024年2月3日 |
---|---|
1.0.0-pre.0 | 2024年2月2日 |
0.2.3 | 2022年11月23日 |
0.2.2 | 2022年9月23日 |
0.1.0 | 2021年5月2日 |
在 图像 中排名第500
每月下载量 3,502
在 7 个crate中使用(通过 turbojpeg)
4.5MB
86K SLoC
turbojpeg-sys
为 turbojpeg
库提供的原始Rust绑定。如果您想在Rust中处理JPEG文件,应使用 turbojpeg
crate 中的高级绑定。
这些绑定适用于 TurboJPEG 版本 3.0,并使用新API(以 tj3
前缀)。请注意,Linux的大部分包管理器只有 TurboJPEG 2.0 或 2.1。
构建
我们支持多种构建原生 TurboJPEG 库和链接到它的选项。您可以从三个方面进行控制
- 源码:我们应该自己编译库,还是使用系统中的编译版本?
- 链接:我们应该使用静态链接还是动态链接?
- 绑定:我们应该使用预生成的Rust绑定,还是应该在构建时生成它们?
源码
TurboJPEG是用C语言编写的,因此我们必须自己编译它或查找系统上的编译库。您可以使用 TURBOJPEG_SOURCE
环境变量来控制我们的行为
-
TURBOJPEG_SOURCE=vendor
(推荐,如果启用了cmake
功能,则为默认值):我们使用cmake
crate 从源代码构建 TurboJPEG 并将其链接到您的Rust可执行文件。我们使用crate中捆绑的 TurboJPEG 源代码(版本 3.0.1)。此选项需要C编译器,如果您想编译使 TurboJPEG 快速的SIMD代码,您还需要 NASM 或 Yasm。默认情况下,如果 TurboJPEG 找不到 NASM,您将收到编译错误。但是,您可以禁用默认功能
require-simd
,这样,当找不到 NASM 时,TurboJPEG 将跳过SIMD代码(但性能会受到影响)。 -
TURBOJPEG_SOURCE=pkg-config
(如果禁用了cmake
功能且启用了pkg-config
,则为默认值):我们使用pkg-config
查找库。 -
TURBOJPEG_SOURCE=explicit
(如果禁用了cmake
和pkg-config
功能,则为默认值):我们在TURBOJPEG_LIB_DIR
中查找库。如果您想在构建时生成绑定(见下文),则还应设置TURBOJPEG_INCLUDE_DIR
以指向包含turbojpeg.h
头文件的目录。
链接
我们可以将上一步编译的库链接到 Rust 可执行文件中,是静态链接(库成为可执行文件的一部分)还是动态链接(库在运行时查找)。您可以使用环境变量来控制此行为
TURBOJPEG_STATIC=1
配置静态链接。TURBOJPEG_DYNAMIC=1
(或TURBOJPEG_SHARED=1
)配置动态链接。
如果您未指定任何这些变量,则默认行为取决于 TURBOJPEG_SOURCE
。如果 TURBOJPEG_SOURCE
是 vendor
或 explicit
,则默认进行静态链接。但是,如果您使用 pkg-config
,则 让 pkg-config
crate 决定;它通常默认使用动态链接。
绑定
要使用 C 库在 Rust 中,我们需要一些样板“绑定”代码来导出 C 符号(函数和变量)到 Rust。我们有两种选择,您可以使用 TURBOJPEG_BINDING
环境变量来控制这个决定
-
TURBOJPEG_BINDING=pregenerated
(除非启用了bindgen
功能,否则为默认值):使用与这个包一起提供的绑定代码。这通常可以正常工作,并且是推荐选项。 -
TURBOJPEG_BINDING=bindgen
(如果启用了bindgen
功能,则为默认值):在构建期间使用 bindgen 生成绑定。这通常不是必需的,但如果您的 TurboJPEG 以某种方式与我们的预生成绑定代码不兼容,这可能会帮到您。
功能
这个包支持多个功能
cmake
(默认):允许我们从源代码构建 TurboJPEG(《TURBOJPEG_SOURCE=vendor)。require-simd
(默认):在从源代码构建 TurboJPEG 时,如果未找到 NASM 并且将跳过快速 SIMD 代码,则终止编译。pkg-config
(默认):允许我们使用pkg-config
(《TURBOJPEG_SOURCE=pkg-config)找到 TurboJPEG。bindgen
:允许我们使用bindgen
在构建时生成绑定。
请注意,turbojpeg
包“导出”这些功能。