maestroerror / php-heic-to-jpg
将 HEIC/HEIF 图像转换为 JPG 类型,无任何依赖
Requires
- php: >=7.4
- maestroerror/heif-converter: 0.2
Requires (Dev)
- pestphp/pest: 2.x-dev
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 开始),您可以在 convert
和 convertFromUrl
中通过传递 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,您可以在 convert
和 convertOnMac
方法中将路径作为参数指定,如下所示
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文件
- heif解析器由@bradfitz提供(https://github.com/go4org/go4/tree/master/media/heif)
- libde265(https://github.com/strukturag/libde265)
- 从libheif(https://github.com/strukturag/libheif)学习到的实现
- Edd Turtle(https://gophercoding.com/convert-heic-to-jpeg-go/)
- crazy-max/xgo(https://github.com/crazy-max/xgo)
支持
支持我们的工作?🌟 您可以通过小额捐赠帮助我们保持代码流畅。每一份支持都对维护和改进我们的开源贡献大有裨益。点击下面的按钮进行捐赠。感谢您的慷慨!
或者使用二维码
日志
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)
- 从此问题中添加文档中的替代软件包评论