maestroerror/php-heic-to-jpg

将 HEIC/HEIF 图像转换为 JPG 类型,无任何依赖

v1.0.7 2024-03-22 23:33 UTC

README

使用 PHP 和 Laravel 框架将 HEIC/HEIF 图像转换为 JPEG 的最简单方法。它使用 Go 语言创建的二进制文件,不依赖任何其他 PHP 库、扩展或第三方软件

安装

在您的项目根目录中运行命令

composer require maestroerror/php-heic-to-jpg

使用方法

使用 "HeicToJpeg" 类非常简单。您需要传递任何 HEIC 图像的完整路径到 "convert" 函数,并调用 "saveAs"(保存为文件)或 "get"(获取文件内容)方法。

// 1. save as file
Maestroerror\HeicToJpg::convert("image1.heic")->saveAs("image1.jpg");
// 2. get content (binary) of converted JPG
$jpg = Maestroerror\HeicToJpg::convert("image1.heic")->get();

对于 MacOS 用户

它应该自动检测操作系统,但如果您想指定架构,建议使用 convertOnMac。第二个参数是您系统的架构,默认设置为 "amd64",但您也可以指定 "arm64"(AArch64,M1)
注意:据多位用户报告,M1 Macbook 可以在 amd64 二进制文件上运行,因此如果 arm64 对您不起作用,只需尝试 convertOnMac("image1.heic")

// By default
Maestroerror\HeicToJpg::convertOnMac("image1.heic", "arm64")->saveAs("image1.jpg");

强制 Linux 使用 arm64

在 Linux 上,由于某种原因,如果它无法正确检测您的架构,或者 php-heic-to-jpg-linux-arm64 二进制文件对您工作良好(从 v1.0.4 开始),您可以在 convertconvertFromUrl 中通过传递 true 作为第三个参数来强制它使用

Maestroerror\HeicToJpg::convert("image1.heic", "", true)->saveAs("image.jpg");

isHeic 方法

在转换之前,您可以使用 isHeic 方法(由 pbs-dg 贡献)来检查文件是否为 HEIC 格式。

$fileIsHeic = HeicToJpg::isHeic("image.heic");
if ($fileIsHeic) {
    // Your code
}

convertFromUrl 方法

如果您的图像是公开可用的,您可以使用 convertFromUrl 方法轻松将其转换并保存到文件系统中。

Maestroerror\HeicToJpg::convertFromUrl("https://github.com/MaestroError/php-heic-to-jpg/raw/maestro/tests/Unit/images/image1.heic")->saveAs("image1.jpg");

处理 'mdat' 文件转换问题

如果您遇到模块无法转换三星设备生成的某些图像的问题(详细说明在此 问题 中),导致错误 error reading "meta" box: got box type "mdat" instead,您可以采取以下步骤

heif-converter-image 已经在此(php-heic-to-jpg)包中由 composer 要求。 heif-converter-image 依赖于 libheif 并为各种平台提供安装脚本,请参阅其 文档

  • 确保您已通过运行 composer require maestroerror/heif-converter 在 composer 中要求 maestroerror/heif-converter

  • 请确保您的系统上已安装 libheif。您可以在 libheif 中找到安装说明或使用 heif-converter-image 提供的您平台的安装脚本。

php-heic-to-jpg 包会自动检测 heif-converter-image 包的存在,并在默认转换失败时尝试使用其命令行界面(CLI)可执行文件进行转换。

如果包找不到 heif-converter-image CLI,您可以在 convertconvertOnMac 方法中将路径作为参数指定,如下所示

HeicToJpg::convert("image.heic", "path/to/your/bin/heif-converter-{linux/windows/macos}")->saveAs("image.jpg");
HeicToJpg::convertOnMac("image.heic", "arm64", "path/to/your/bin/heif-converter-macos")->saveAs("image.jpg");
HeicToJpg::convertFromUrl("SOME_URL", "path/to/your/bin/heif-converter-{linux/windows/macos}")->saveAs("image.jpg");

按照这些步骤,您应该能够处理之前导致问题的图像转换。

致谢

我想感谢这些人。他们的工作帮助我用Go构建了heicToJpg文件

支持

支持我们的工作?🌟 您可以通过小额捐赠帮助我们保持代码流畅。每一份支持都对维护和改进我们的开源贡献大有裨益。点击下面的按钮进行捐赠。感谢您的慷慨!

或者使用二维码

日志

27/02/2023
使用命令 sudo /home/maestroerror/go/bin/xgo --targets=darwin/* github.com/MaestroError/php-heic-to-jpg 为MacOs(OS X / Darwin)构建了可执行文件
04/03/2023
为linux、windows和macos添加了pest测试和工作流程。使用./vendor/bin/pest在本地运行测试

待办事项
  • 查明是否可以使用PHP的docker CLI命令,如果是,则在文档中添加
  • 尝试更新到Go 1.21版本
  • 添加用于生成可执行文件的github动作
  • 添加问题#33及其解决方案作为arm64示例
  • 添加问题#28的更改(try/catch)
  • 从此问题中添加文档中的替代软件包评论