dsentker/imageorientationfixer

该包的最新版本(dev-master)没有提供许可证信息。

修复上传图片的方向

dev-master 2022-05-19 10:18 UTC

This package is auto-updated.

Last update: 2024-09-19 15:37:44 UTC


README

修复上传图片的方向问题。

问题

一个原生分辨率为600x1500像素的图片,如果元数据中存储了相应的值,仍然可以以横幅格式(1500x600)显示。例如,当图片是用智能手机拍摄的,并且设备被旋转90度以适应横向格式时,就会出现这种情况。

这张图片可能导致在浏览器中出现意外的结果(使用众所周知的-元素显示)。浏览器不考虑EXIF信息,并错误地显示图片。

解决方案

幸运的是,智能手机和其他现代设备在图片中存储了合适的EXIF元信息。这个PHP库读取这些信息,并根据需要自动旋转图片。

优点

ImageOrientationFixer 从图片中读取EXIF数据以评估图片的原始方向。如果服务器上未安装EXIF扩展,可以使用正则表达式辅助的替代读取器(RegexReader)访问这些信息。

您可以选择替换原始图片或以新名称保存(我真的不明白为什么要这样做)。

缺点

此库使用GD图像扩展来访问文件类型并进行旋转。众所周知,此扩展占用内存较多。因此,此库不适合批量处理多个大图片。

我欢迎任何对该开源项目的帮助,例如使用具有DI的更灵活的图像处理库。

安装

从GitHub下载文件,并使用位于/src/ImageOrientationFixer的autoloader.php文件。

我建议使用composer: composer require "dsentker/imageorientationfixer:*@dev"

使用方法

快速使用

use DSentker\ImageOrientationFixer\ImageOrientationFixer;
require_once 'vendor/autoload.php';

// image.jpg will be replaced with the fixed version of this image
ImageOrientationFixer::fixImage('path/to/image.jpg');

优势使用

require_once 'vendor/autoload.php';

$imageFile = 'image.jpeg';

require '../src/ImageOrientationFixer/autoload.php';

$fixer = new \DSentker\ImageOrientationFixer\ImageOrientationFixer($imageFile);

/** @var \DSentker\ImageOrientationFixer\Image $fixedImage */
$fixedImage = $fixer->getFixedImage();
$fixedImage->save(); // Replace old image

// Alternate approach with the regex reader, if EXIF extension is not installed
$overwriteImage = true;
$regexFixer = new \DSentker\ImageOrientationFixer\ImageOrientationFixer($imageFile);
$regexFixer->setReader(new \DSentker\ImageOrientationFixer\OrientationReader\RegexReader());
$result = $regexFixer->getFixedImage()->saveAs('fixed.jpg', $overwriteImage);

if($result) {
    echo 'Are U A Wizard?';
}

致谢

提交错误和功能请求

错误和功能请求在GitHub上跟踪。

待办事项(欢迎帮助!)

  • 编写测试
  • 创建方向读取器工厂
  • 创建Symfony3包
  • 让开发者选择GD/GD2、Imagick和其他酷炫的图像库。

版权和许可证

ImageOrientationFixer许可使用MIT许可证(MIT)。请参阅LICENSE获取更多信息。