mozjpeg 完整构建指南:从 CMake 配置到跨平台编译、安装与回归测试
图像处理音视频【免费下载链接】mozjpegImproved JPEG encoder.项目地址https://gitcode.com/gh_mirrors/mo/mozjpeg点击查看免费下载导读本文基于仓库根目录的 BUILDING.md 编写系统讲解 mozjpeg基于 libjpeg-turbo 的 JPEG 编码器优化分支从源码构建的完整流程。mozjpeg 的构建方式与 libjpeg-turbo 完全一致见 README.md 中 Compiling 一节因此本文的流程、选项与配方同样适用于所有 libjpeg-turbo 系列项目。读完本文你将掌握 Un*x、WindowsVisual C / MinGW的构建方法、SIMD 汇编器NASM/Yasm的配置、libjpeg v7/v8 兼容模拟、算术编码开关、Java 封装构建、iOS/Android 交叉编译、安装路径定制、发行包制作以及回归测试的全套实战技能。一、构建前置要求1.1 所有平台通用要求CMake需要 v2.8.12 或更高版本。当前仓库根目录的 CMakeLists.txt 声明为cmake_minimum_required(VERSION 2.8.12...3.28)项目版本为 5.0.0。NASM 或 Yasm仅在构建 x86 / x86-64 SIMD 扩展时需要NASM 要求 2.13 或更高Yasm 要求 1.2.0 或更高若要以 Intel Control-flow Enforcement TechnologyCET控制流强制技术支持构建 libjpeg-turbo则需要 NASM 2.15 或更高CET 检测逻辑见 simd/CMakeLists.txt通过check_c_source_compiles检测__CET__宏后为汇编器追加-D__CET__标志macOS 上可通过 MacPorts 或 Homebrew 安装 NASM/Yasm若希望隐藏静态链接 libjpeg-turbo 的 Mac 可执行文件或动态库中的 SIMD 函数符号必须使用 NASM 2.14 或更高或使用 Yasm。汇编器路径的指定方式若 NASM/Yasm 不在PATH中可通过以下两种方式之一指定完整路径CMake 变量CMAKE_ASM_NASM_COMPILER环境变量ASM_NASM在 Windows 上路径需使用正斜杠例如c:/nasm/nasm.exe。simd/CMakeLists.txt 中正是读取ASM_NASM环境变量来填充CMAKE_ASM_NASM_COMPILER。此外RHEL 8 及其衍生发行版的 NASM/Yasm 位于 CRBCode Ready Builder或 PowerTools 仓库中默认未启用。1.2 Un*x 平台Linux、macOS、FreeBSD、Solaris、Cygwin编译器推荐 GCC v4.1 或更高或 Clang以获得最佳性能。TurboJPEG Java 封装需要 JDK 或 OpenJDK 1.5 或更高Solaris 10 及更高版本、多数现代 Linux 发行版自带。若使用 JDK 11 或更高则还必须使用 CMake 3.10.x 或更高。1.3 Windows构建 Windows 版本有三条可选路线Microsoft Visual C 2005 或更高可通过安装 Visual Studio Community Edition 获得全部所需工具也可下载安装独立的 Windows SDKWindows 7 或更高它包含 32 位与 64 位 Visual C 命令行编译器。若从命令行构建需将相应的编译器和 SDK 目录加入INCLUDE、LIB、PATH环境变量通常通过执行vcvars32.bat或vcvars64.bat完成使用 Visual C 2015 或更高版本构建的静态库无法与更早版本的 Visual C 混用反之亦然libjpeg API 的 DLLjpeg{version}.dll将依赖与构建所用 Visual C 版本对应的 C 运行时 DLL。Vcpkg 依赖管理器先用 vcpkg 安装 libpngcjpeg/djpeg 的 PNG 支持依赖再构建或直接安装现成的 mozjpeg portgit clone https://github.com/Microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install vcpkg install libpng:x64-windows vcpkg install libpng:x64-windows-static # 或直接通过 vcpkg 安装 mozjpeg由微软团队成员与社区贡献者维护 vcpkg install mozjpegMinGW在 Windows 机器上推荐使用 MSYS2 或 tdm-gcc两者都会在开始菜单安装一个命令行快捷方式启动后编译器路径已自动配置好。Java 封装要求构建 TurboJPEG Java 封装需要 JDK 1.5 或更高使用 JDK 11 时同样要求 CMake 3.10.x 或更高。二、构建系统关键约束与概念2.1 不支持作为子项目嵌入libjpeg-turbo/mozjpeg 的构建系统不支持通过 CMake 的add_subdirectory()函数作为子项目集成。顶层 CMakeLists.txt 对此有硬性检查一旦检测到不是从源码目录直接配置就立即message(FATAL_ERROR ...)并提示改用ExternalProject_Add()。若下游项目需要集成应使用 CMake 的ExternalProject_Add()函数或对构建系统做下游定制。2.2 Out-of-Tree 构建外部构建目录所有二进制对象、库与可执行文件都生成在执行 CMake 的目录即二进制目录/binary directory中该目录不必与源码目录相同。你可以基于同一份源码树用不同编译器或配置创建多个相互独立的二进制目录。下文约定{build_directory}—— 二进制目录{source_directory}—— mozjpeg 源码目录若是 in-tree 构建两者相同。2.3 使用 Ninja如果使用 Ninja 构建系统则将所有流程中的make/nmake替换为ninja并将-G指定的 CMake 生成器替换为Ninja即可。三、各平台标准构建流程说明以下流程假设在命令行调用 CMake但所有流程同样可以适配 CMake GUI如cmake-gui。3.1 Un*xLinux / macOS / FreeBSD / Solaris / Cygwincd {build_directory} cmake -GUnix Makefiles [additional CMake flags] {source_directory} make注意在 Solaris 上上述命令默认生成 32 位构建64 位构建配方见下文构建配方。3.2 Visual C命令行NMakecd {build_directory} cmake -GNMake Makefiles -DCMAKE_BUILD_TYPERelease [additional CMake flags] {source_directory} nmake该流程构建 32 位还是 64 位版本取决于PATH中cl.exe的版本。3.3 Visual CIDE根据 Visual Studio 版本选择对应的 CMake 生成器不带参数运行cmake可查看可用生成器列表例如cd {build_directory} cmake -GVisual Studio 10 [additional CMake flags] {source_directory}在生成器名后追加Win64如Visual Studio 10 Win64可构建 64 位版本32 位与 64 位构建必须使用不同的构建目录随后在 Visual Studio 中打开ALL_BUILD.vcproj构建其中的某个配置Debug、Release 等即可完成全部构建。3.4 MinGWMSYS 环境注意以下流程假设在 Windows 机器上使用 MSYS 环境若是在 Un*x含 macOS 与 Cygwin上交叉编译参见构建配方。cd {build_directory} cmake -GMSYS Makefiles [additional CMake flags] {source_directory} make四、构建产物一览4.1 Un*x / Cygwin 产物文件说明libjpeg.alibjpeg API 静态链接库libjpeg.so.{version}Linux/Unix、libjpeg.{version}.dylibMac、cygjpeg-{version}.dllCygwinlibjpeg API 共享库libjpeg.so/libjpeg.dyliblibjpeg API 开发符号链接libjpeg.dll.aCygwinlibjpeg API 导入库libturbojpeg.aTurboJPEG API 静态链接库libturbojpeg.so.0.2.0Linux/Unix、libturbojpeg.0.2.0.dylibMac、cygturbojpeg-0.dllCygwinTurboJPEG API 共享库libturbojpeg.so/libturbojpeg.dylibTurboJPEG API 开发符号链接libturbojpeg.dll.aCygwinTurboJPEG API 导入库版本号说明{version}默认为 62.2.0、7.2.0 或 8.1.2取决于启用的是 libjpeg v6b默认、v7 还是 v8 模拟Cygwin 下{version}为 62、7 或 8。需要指出的是当前仓库 CMakeLists.txt 中TURBOJPEG_SO_AGE已为 3对应 TurboJPEG 3 APITURBOJPEG_SO_VERSION 0.3.0因此实际生成的 TurboJPEG 共享库版本后缀以构建时的 CMake 计算值为准文档中的 0.2.0 对应的是较旧的 TurboJPEG 2.x API 时代。4.2 Visual C 产物文件说明jpeg-static.liblibjpeg API 静态链接库jpeg{version}.dlllibjpeg API DLLjpeg.liblibjpeg API 导入库turbojpeg-static.libTurboJPEG API 静态链接库turbojpeg.dllTurboJPEG API DLLturbojpeg.libTurboJPEG API 导入库{version}为 62、7 或 8取决于启用的 libjpeg 兼容版本。IDE 构建时产物位于{configuration}/子目录下如Debug/、Release/、RelWithDebInfo/、MinSizeRel/。4.3 MinGW 产物文件说明libjpeg.alibjpeg API 静态链接库libjpeg-{version}.dlllibjpeg API DLLlibjpeg.dll.alibjpeg API 导入库libturbojpeg.aTurboJPEG API 静态链接库libturbojpeg.dllTurboJPEG API DLLlibturbojpeg.dll.aTurboJPEG API 导入库五、核心 CMake 配置选项顶层 CMakeLists.txt 集中定义了所有可配置选项下面逐一说明。5.1 Debug 构建在 CMake 命令行追加-DCMAKE_BUILD_TYPEDebug若使用 NMake则移除-DCMAKE_BUILD_TYPEReleaseNMake 下默认即为 Debug。顶层脚本中未显式设置CMAKE_BUILD_TYPE时默认采用 Release见 CMakeLists.txt。5.2 libjpeg v7 / v8 API/ABI 模拟cmake -DWITH_JPEG71 ... # 构建与 libjpeg v7 API/ABI 兼容的版本 cmake -DWITH_JPEG81 ... # 构建与 libjpeg v8 API/ABI 兼容的版本对应源码中JPEG_LIB_VERSION分别设为 70 与 80默认 62见 CMakeLists.txt。更详细的 v7/v8 模拟说明可参考 README.md。5.3 算术编码支持Arithmetic Coding算术编码专利已过期本版本内置了该功能实现基于 libjpeg v8但在模拟 v7 或 v6b 时同样生效。默认同时启用算术编码与解码若想关闭可分别使用-DWITH_ARITH_ENC0 # 禁用算术编码 -DWITH_ARITH_DEC0 # 禁用算术解码注意当启用WITH_JPEG7或WITH_JPEG8时源码会强制同时打开WITH_ARITH_ENC与WITH_ARITH_DEC见 CMakeLists.txt。这些开关会进一步控制C_ARITH_CODING_SUPPORTED与D_ARITH_CODING_SUPPORTED宏并决定 CMakeLists.txt 中的-arithmetic回归测试是否加入构建。5.4 TurboJPEG Java 封装cmake -DWITH_JAVA1 ...该选项将 Java Native InterfaceJNI封装编入 TurboJPEG 共享库并构建前端 Java 类使 Java 应用能直接使用 TurboJPEG 共享库同时自动隐含ENABLE_SHARED1。详见 java/README。相关环境变量与 CMake 变量JAVA_HOMEJava 不在PATH或想用其他 JDK 时在运行 CMake 前设置Java_JAVAC_EXECUTABLE、Java_JAVA_EXECUTABLE、Java_JAR_EXECUTABLE分别指定 javac、java、jar 的替代命令或位置CMAKE_JAVA_COMPILE_FLAGS或JAVAFLAGS环境变量传给 Java 编译器的参数JAVAARGS运行 TurboJPEG Java 单元测试时传给 JRE 的参数。5.5 其他常用选项源码级佐证ENABLE_SHARED/ENABLE_STATIC默认均 TRUE是否构建共享/静态库WITH_SIMD默认 TRUE是否包含当前平台可用的 SIMD 扩展REQUIRE_SIMD默认 FALSE设为 TRUE 时若当前平台没有可用 SIMD 扩展则直接报致命错误而不是退化为非 SIMD 构建simd_fail宏的实现见 simd/CMakeLists.txtWITH_TURBOJPEG默认 TRUE是否包含 TurboJPEG API 库及其测试程序PNG_SUPPORTED默认 TRUEPNG 支持需 libpngWITH_FUZZ默认 FALSE是否构建 fuzz 目标对应 fuzz/ 目录下的测试程序。六、构建配方Build Recipes6.1 在 64 位 Linux/Unix 上构建 32 位运行 CMake 前用 export/setenv 设置环境变量CFLAGS-m32 LDFLAGS-m326.2 在 Solaris 上构建 64 位CFLAGS-m64 LDFLAGS-m646.3 指定其他 C 编译器Un*x 系统上运行 CMake 前可通过CC环境变量指定 C 编译器命令。6.4 在 Un*x含 Mac 与 Cygwin上交叉编译 32 位 MinGW在{build_directory}下创建toolchain.cmakeset(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR X86) set(CMAKE_C_COMPILER {mingw_binary_path}/i686-w64-mingw32-gcc) set(CMAKE_RC_COMPILER {mingw_binary_path}/i686-w64-mingw32-windres){mingw_binary_path}是 MinGW 二进制所在目录通常为/usr/bin。然后执行cd {build_directory} cmake -GUnix Makefiles -DCMAKE_TOOLCHAIN_FILEtoolchain.cmake \ -DCMAKE_INSTALL_PREFIX{install_path} \ [additional CMake flags] {source_directory} make{install_path}是 libjpeg-turbo 二进制应安装到的路径。6.5 在 Un*x 上交叉编译 64 位 MinGW同样的步骤toolchain.cmake 内容改为set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR AMD64) set(CMAKE_C_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-gcc) set(CMAKE_RC_COMPILER {mingw_binary_path}/x86_64-w64-mingw32-windres)配置与构建命令与 32 位完全一致。七、为 iOS 构建iPhone/iPad 等 iOS 平台使用 Arm 处理器且目前所有受支持的型号都包含 Neon 指令因此可以充分利用 mozjpeg 的 SIMD 扩展显著加速 JPEG 编解码Arm Neon 的实现源码见 simd/arm/ 目录构建逻辑见 simd/CMakeLists.txt其中包括 Neon 内联函数可用性探测与NEON_INTRINSICS选项。Armv864 位要求 Xcode 5 或更高推荐 Xcode 6.3.x 或更高。以下脚本演示如何构建运行于 iPhone 5S / iPad Mini 2 / iPad Air 及更新设备上的版本IOS_PLATFORMDIR/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform IOS_SYSROOT($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk) export CFLAGS-Wall -miphoneos-version-min8.0 -funwind-tables cd {build_directory} cmake -GUnix Makefiles \ -DCMAKE_C_COMPILER/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \ -DCMAKE_OSX_ARCHITECTURESarm64 \ -DCMAKE_OSX_SYSROOT${IOS_SYSROOT[0]} \ [additional CMake flags] {source_directory} make若要在 Apple silicon Mac 上为 iOS 模拟器构建将iPhoneOS替换为iPhoneSimulator并将-miphoneos-version-min替换为-miphonesimulator-version-min即可。八、为 Android 构建构建 Android 版本要求Android NDK v13b 或更高。以下为各 ABI 的通用配方脚本可按需修改。8.1 Armv732 位推荐 NDK r19 与 Clang# 按需设置这些变量 NDK_PATH{full path to the NDK directory-- for example, /opt/android/android-ndk-r16b} TOOLCHAIN{gcc or clang-- gcc 用于 NDK r16b 及更早版本 clang 用于 NDK r17c 及更高版本} ANDROID_VERSION{要支持的最低 Android 版本-- 例如 16、19 等} cd {build_directory} cmake -GUnix Makefiles \ -DANDROID_ABIarmeabi-v7a \ -DANDROID_ARM_MODEarm \ -DANDROID_PLATFORMandroid-${ANDROID_VERSION} \ -DANDROID_TOOLCHAIN${TOOLCHAIN} \ -DCMAKE_ASM_FLAGS--targetarm-linux-androideabi${ANDROID_VERSION} \ -DCMAKE_TOOLCHAIN_FILE${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make8.2 Armv864 位推荐 ClangNDK_PATH{full path to the NDK directory} TOOLCHAIN{gcc or clang-- gcc 用于 NDK r14b 及更早版本 clang 用于 NDK r17c 及更高版本} ANDROID_VERSION{要支持的最低 Android 版本64 位构建要求 21 或更高} cd {build_directory} cmake -GUnix Makefiles \ -DANDROID_ABIarm64-v8a \ -DANDROID_ARM_MODEarm \ -DANDROID_PLATFORMandroid-${ANDROID_VERSION} \ -DANDROID_TOOLCHAIN${TOOLCHAIN} \ -DCMAKE_ASM_FLAGS--targetaarch64-linux-android${ANDROID_VERSION} \ -DCMAKE_TOOLCHAIN_FILE${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make8.3 x8632 位NDK_PATH{full path to the NDK directory} TOOLCHAIN{gcc or clang-- gcc 用于 NDK r14b 及更早版本 clang 用于 NDK r17c 及更高版本} ANDROID_VERSION{要支持的最低 Android 版本-- 例如 16、19 等} cd {build_directory} cmake -GUnix Makefiles \ -DANDROID_ABIx86 \ -DANDROID_PLATFORMandroid-${ANDROID_VERSION} \ -DANDROID_TOOLCHAIN${TOOLCHAIN} \ -DCMAKE_TOOLCHAIN_FILE${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make8.4 x86-6464 位NDK_PATH{full path to the NDK directory} TOOLCHAIN{gcc or clang-- gcc 用于 NDK r14b 及更早版本 clang 用于 NDK r17c 及更高版本} ANDROID_VERSION{要支持的最低 Android 版本64 位构建要求 21 或更高} cd {build_directory} cmake -GUnix Makefiles \ -DANDROID_ABIx86_64 \ -DANDROID_PLATFORMandroid-${ANDROID_VERSION} \ -DANDROID_TOOLCHAIN${TOOLCHAIN} \ -DCMAKE_TOOLCHAIN_FILE${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make九、探索更多高级 CMake 选项本文未专门提及的其他 CMake 选项可以在初次配置完成后于构建目录中运行ccmake {source_directory}或cmake-gui {source_directory}ccmake是文本交互式版本的 CMakeCMake-GUI是图形界面版本。两者都会显示所有与 libjpeg-turbo/mozjpeg 构建相关的变量、当前取值及帮助字符串。十、安装与卸载10.1 基本安装运行make install或nmake installVisual Studio IDE 中构建 install 目标即可安装卸载则运行make uninstall或nmake uninstall或 IDE 中的 uninstall 目标。卸载逻辑由 cmakescripts/cmake_uninstall.cmake.in 生成的脚本实现。10.2 自定义安装前缀CMAKE_INSTALL_PREFIX可通过该变量将文件安装到任意目录。默认值如下与顶层 CMakeLists.txt 的默认前缀逻辑一致平台/构建类型默认安装前缀Visual Studio 32 位构建c:\libjpeg-turboVisual Studio 64 位构建c:\libjpeg-turbo64MinGW 32 位构建c:\libjpeg-turbo-gccMinGW 64 位构建c:\libjpeg-turbo-gcc64Un*x/opt/libjpeg-turbo使用默认前缀时文件以官方 libjpeg-turbo 二进制包风格的目录结构安装修改前缀例如设为/usr/local后则按 GNU 标准目录结构安装。10.3 细粒度目录控制以下 CMake 变量可精确控制各类文件安装位置CMAKE_INSTALL_BINDIR、CMAKE_INSTALL_DATAROOTDIR、CMAKE_INSTALL_DOCDIR、CMAKE_INSTALL_INCLUDEDIR、CMAKE_INSTALL_JAVADIR、CMAKE_INSTALL_LIBDIR、CMAKE_INSTALL_MANDIR。这些目录变量可指定为绝对路径也可指定为相对CMAKE_INSTALL_PREFIX的路径例如将CMAKE_INSTALL_DOCDIR设为doc文档将安装到${CMAKE_INSTALL_PREFIX}/doc若某目录变量以尖括号形式包含另一个目录变量名其最终值取决于被包含变量的最终值例如CMAKE_INSTALL_MANDIR的默认值为CMAKE_INSTALL_DATAROOTDIR/man。安装时实际落地的文件可从 CMakeLists.txt 的install()指令中看到包括turbojpeg.h、jconfig.h、jerror.h、jmorecfg.h、jpeglib.h头文件libjpeg.pc/libturbojpeg.pcpkg-config 文件以及mojpegConfig.cmake/mojpegTargets.cmake等 CMake 包配置文件。十一、创建发行包构建系统支持生成多种发行包目标定义见 cmakescripts/BuildPackages.cmake。11.1 Linuxmake rpm # 生成 Red Hat 风格二进制 RPM 包需要 RPM v4 或更高 make srpm # 先执行 make dist 生成纯净源码包再生成源码 RPM需要 RPM v4 或更高 make deb # 生成 Debian 风格二进制包需要 dpkgmake dist本质上通过git archive打包当前 HEAD见 cmakescripts/BuildPackages.cmake。11.2 Macmake dmg # 生成 Mac 包/磁盘镜像需要 pkgbuild 与 productbuildOS X/macOS 10.7 默认安装若希望生成包含通用 x86-64/Arm 二进制的 Mac 包需设置 CMake 变量SECONDARY_BUILD包含一份交叉编译的 x86-64 或 Armv864 位iOS/macOS 构建的目录用于合成通用二进制。步骤先用 CMake 在指定的构建目录中配置交叉编译的次级构建iOS 场景参见上文为 iOS 构建再以 out-of-tree 方式配置主原生构建并指定该变量完成构建最后运行make dmg。打包系统会自动构建次级构建用lipo将其与主构建合并为通用二进制后打包。11.3 WindowsNMakenmake installerMinGWmake installerVisual Studio IDE构建 installer 目标安装包libjpeg-turbo-{version}[-gcc|-vc][64].exe位于{build_directory}下IDE 构建时位于与配置同名的子目录如Debug\、Release\。生成 Windows 安装包需要Nullsoft Install SystemNSIS且makensis.exe需在PATH中。Windows 安装包的 NSIS 脚本由 release/installer.nsi.in 模板生成。十二、回归测试12.1 标准测试构建完成后Un*xmake testWindows 命令行nmake testVisual Studio IDE构建 RUN_TESTS 目标标准测试会运行一系列用例验证 libjpeg-turbo 与 libjpeg v6b 之间的数学兼容性是否得到保持同时会调用 TurboJPEG 单元测试验证 TurboJPEG C 与 Java API 的 colorspace 扩展、YUV 编码、解压缩放等功能相应地底层 libjpeg API 的等价功能也得到验证。从 CMakeLists.txt 可以看到测试矩阵覆盖了-revert、-dct int、-prog、-arithmetic、-crop、-precision等大量组合并通过md5cmp与预置的 MD5 基准逐位比对输出图像。12.2 清理测试产物Un*xmake testcleanWindows 命令行nmake testcleanVisual Studio IDE构建 testclean 目标testclean 通过 cmakescripts/testclean.cmake 删除testout*及各类*_GRAY_*、*_420_*、*_422_*、*_444_*等测试输出图像和日志文件。12.3 扩展 TurboJPEG 测试Un*x 平台上可运行make tjtest对 TurboJPEG C 与 Java 封装执行更全面的测试。这些扩展测试会遍历 TurboJPEG API 中未被单元测试覆盖的全部特性包括无损变换选项并将每个特性生成的图像与 libjpeg API 等价特性生成的图像进行比较。扩展测试的目标是检测 TurboJPEG 封装的回归而非底层 libjpeg API 库的回归。此外构建系统还提供了tjtest12与tjtest16目标分别以 12 位与 16 位精度运行测试见 CMakeLists.txt它们通过 cmakescripts/tjbenchtest.cmake 驱动tjbenchtest与tjexampletest覆盖-alloc、-yuv、-optimize、-progressive、-arithmetic、-lossless及-java等参数组合。结语从本文可以看出mozjpeg 沿用了 libjpeg-turbo 高度工程化的 CMake 构建体系同一套源码树即可通过不同的生成器与配置选项产出 Linux、macOS、WindowsMSVC/MinGW、iOS、Android 等多个平台的静态库、动态库与命令行工具同时通过WITH_JPEG7/WITH_JPEG8、WITH_ARITH_ENC/DEC、WITH_JAVA、WITH_SIMD/REQUIRE_SIMD等开关对 API 兼容性、功能子集与性能路径做精细化裁剪。配合make test与make tjtest的多层次回归体系任何对构建产物或 API 的改动都能被迅速验证。若需要进一步了解 mozjpeg 独有的压缩扩展Trellis 量化、渐进式扫描优化等可继续阅读 README-mozilla.txt若要掌握其各命令行工具的用法可参考 usage.txt 与 wizard.txt。赞分享图像处理音视频【免费下载链接】mozjpegImproved JPEG encoder.项目地址https://gitcode.com/gh_mirrors/mo/mozjpeg点击查看免费下载相关推荐GLFW编译构建CMake跨平台编译的完整配置教程GLFW编译构建CMake跨平台编译的完整配置教程 前言为什么选择CMake构建GLFW 还在为不同平台的GLFW编译配置而烦恼吗GLFW作为跨平台的O图形学桌面应用Bitcoin Core FreeBSD 构建指南从依赖安装到 cmake 配置、编译与测试的完整流程Bitcoin Core FreeBSD 构建指南从依赖安装到 cmake 配置、编译与测试的完整流程 本文基于 Bitcoin Core 仓库中的官方 Fr区块链金融科技网络密码学Icarus Verilog 安装指南从源码编译、平台适配到回归测试验证Icarus Verilog 安装指南从源码编译、平台适配到回归测试验证 Icarus Verilogiverilog是一款开源的 Verilog HDL编译器硬件仿真EDA上一篇3分钟搞定塞尔达传说旷野之息Switch与WiiU存档互转完全指南下一篇如何获取最全面的旋转机械故障诊断数据集工业AI应用权威指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考