joppuyo / jpeg-xl-encode
一个用于编码 JPEG XL 图像的 PHP 库。非常受 WebP Convert 启发。
Requires
- php: >=7.2.5
- respect/validation: ^2.0.17
- rosell-dk/image-mime-type-guesser: ^0.3.1
- symfony/process: ^5.3
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.3
- codeception/module-cli: ^1.1
- codeception/module-phpbrowser: ^1.0.0
Suggests
- jcupitt/vips: Required for using the vips method
This package is auto-updated.
Last update: 2024-09-15 13:23:14 UTC
README
JPEG XL 编码
一个用于编码 JPEG XL 图像的 PHP 库。支持 JPEG 和 PNG 输入。非常受优秀的 WebP Convert 库的启发。
它旨在作为一个即插即用的解决方案,覆盖最常用的用例,并可以用于各种 PHP 项目中。
要求
- PHP 7.2.5 或更高版本。
- Linux、macOS 或 Windows 操作系统
- 需要以下方法之一来编码 JPEG XL 图像:
- 需要启用
proc_openPHP 函数,以便库可以在命令行上执行 cjxl 二进制文件。 - 需要安装并启用
vipsPHP 扩展。VIPS 图像处理库必须使用 jxl 支持编译。 - 需要安装并启用
imagickPHP 扩展。ImageMagick 库需要使用 jxl 支持编译。
- 需要启用
安装
composer require joppuyo/jpeg-xl-encode
用法
require __DIR__ . '/vendor/autoload.php'; $source = '/absolute/path/to/source.jpeg'; $destination = '/absolute/path/to/destination.jxl'; $options = [ 'encoding' => 'lossy', 'quality' => 80, ]; try { \NPX\JpegXlEncode\Encoder::encode($source, $destination, $options); } catch (Exception $exception) { error_log('Whoops, something went wrong.'); }
选项
编码
encoding
选择要使用的编码,对于 JPEG 输入使用 lossy(VarDCT),对于 PNG 输入使用 lossless(模块化)。默认情况下,JPEG 输入为 lossy,PNG 输入为 lossless。
质量
quality
有损压缩的图像质量。质量范围从 1 到 100。默认为 85。
努力
effort
控制用于图像编码的时间。编码时间越长,文件越小。范围从 1 到 9,其中 1 是最快的,9 是最慢的。默认为 7。
渐进式
progressive
启用图像的渐进式解码。如果网页浏览器支持渐进式渲染,则图像将感觉下载得更快。在 VarDCT 模式下,渐进式解码对文件大小的影响不大。
不建议为模块化图像启用渐进式解码,因为它会使生成的图像文件显著变大。在未来版本中,当有浏览器支持只下载模块化渐进文件的一部分时,可能会在将来版本中启用。
默认值为 lossy 的 true 和 lossless 的 false。
方法
有四种不同的方法可供使用:cjxl 二进制文件、cjxl 系统二进制文件、ImageMagick 扩展和 Vips 扩展。库将遍历所有可用方法并尝试使用它们。如果没有任何方法可用,将抛出异常。
Cjxl 二进制文件
此方法在命令行上执行 cjxl 二进制文件。这是最兼容的方法,支持最多功能。但是,由于库在命令行上执行二进制文件,因此需要在 PHP 安装中启用 proc_open 函数。一些主机可能出于安全原因禁用了此函数。
注意:此库包含 Linux、macOS 和 Windows 系统的静态编译版本 cjxl 二进制文件。二进制文件包含所有必需的库,这意味着它将直接工作,无需安装任何其他依赖项。
Cjxl 系统二进制文件
这与前一种方法相同,但它从系统 PATH 执行 cjxl 二进制文件。这意味着您需要使用系统包管理器(如 homebrew)安装 jpeg xl 或从源代码构建 jpeg xl,并将 cjxl 二进制文件添加到您的 PATH 变量中。
ImageMagick 扩展
此方法使用 ImageMagick 库及其 PHP 扩展 Imagick。然而,ImageMagick 需要使用 JXL 代理进行构建。实际上,这意味着您需要在服务器上安装 libjxl 库。然后,您需要从源代码构建 ImageMagick 并使用选项 --with-jxl=yes。最后,您需要安装 Imagick PHP 扩展。目前,ImageMagick 扩展不支持渐进式编码。有关如何编译支持 JPEG XL 的 ImageMagick 的示例,请参阅 此 Dockerfile。
Vips 扩展
此方法使用 vips 库及其 PHP 扩展。然而,vips 需要具有 JXL 支持进行构建。实际上,这意味着您需要在服务器上安装 libjxl 库。然后,您需要从源代码构建 vips。最后,您需要安装 vips PHP 扩展。目前,vips 扩展不支持渐进式编码。有关如何编译支持 JPEG XL 的 VIPS 的示例,请参阅 此 Dockerfile。
除了 vips 扩展之外,您还需要在项目中安装 jcupitt/vips PHP 库以及 jpeg-xl-encode,您可以通过以下命令执行此操作
composer require jcupitt/vips
许可证
MIT。
有关详细的许可证信息,请参阅各个文件头部和 .reuse/dep5。
维护等级
此项目处于积极开发中,目前有多个功能正在开发中。