随着手机拍照技术的进步,新的图片格式 HEIC (High Efficiency Image Format) 也应运而生。与传统的 JPEG 格式相比,HEIC 格式相同画质下会占用更少的存储空间。然而,由于 HEIC 格式的新颖性,许多软件包括 PHP 在内并没有完全支持该格式。本文将会讲解在 PHP 中处理 HEIC 格式图片的方法,并提供一些实例。
首先,我们需要了解 HEIC 格式的原理。HEIC 实际上是一个多媒体容器,它可以在其中包含多个编码方式不同的图像。例如一张 HEIC 图片可能包含了多张带有不同方向、不同渲染效果的图像。HEIC 的编码方式则采用了现代视频编码标准 H.265,这使得在相同画质下相比 JPEG 格式占用更少的存储空间。
由于 HEIC 格式比 JPEG 更为先进,然而 PHP 在解析 HEIC 图片时需要耗费更多的时间和资源。这是由于 PHP 并没有原生支持 HEIC 格式,这意味着我们需要借助第三方库来帮助我们解析和处理 HEIC 图片。
目前来说,有两种主要的解决方案:使用 Imagick 库或使用 Libheif 库。
首先,我们看看如何使用 Imagick 库来解析 HEIC 图片。大致的步骤如下:
- 安装 Imagick 库(通过 PECL 或源代码安装);
- 安装 ImageMagick 库(这是 Imagick 库所需的依赖库);
- 通过 Imagick 库来读取 HEIC 文件。
一个简单的例子如下所示:
$img = new \Imagick("example.heic"); $img->writeImage("example.jpg");上述代码片段中我们读取了名为 `example.heic` 的 HEIC 图片,并将其转换为了 JPEG 格式的图片并保存在了本地。 除了 Imagick 库外,我们还可以使用 Libheif 库来解析 HEIC 图片。安装 Libheif 库比 Imagick 会稍微简单一些: - 安装 Libheif 库(这可以通过各种操作系统的包管理器完成); - 安装 Libheif 扩展(可以通过 PECL 或源代码安装)。 使用 Libheif 库解析 HEIC 图片的例子如下所示:
$heif = heif_load_file("example.heic"); $decoded = heif_decode_image($heif, heif_compression_format_hevc); imagejpeg(imagecreatefromstring($decoded), "example.jpg");上述代码片段中我们使用了 Libheif 将 HEIC 图片解析为一个 RAW 图片,然后将该图片转换为了 JPEG 格式。 需要注意的是,由于 HEIC 格式相比 JPEG 更为先进,所以在 PHP 中处理 HEIC 图片时需要更多的时间和资源。此外,虽然 Imagick 与 Libheif 已经能够帮助我们解析 HEIC 格式图片,但是它们仍旧存在一些问题。例如,Libheif 目前并没有支持所有的 HEIC 图片,而 Imagick 则无法正常处理一些带有 Exif 头信息的图片。 因此,在实际使用中,我们仍需根据实际情况来选择是否使用 HEIC 格式,并且需要选择适合自己的第三方库来读取和解析此类图片。