PHP exif_read_data 非法 IFD 大小

2022-08-30 21:18:00

我正在开发一个应用程序,在其中修复了从 AWS 存储桶下载的 jpeg 文件的方向(如果存在)。

在这里,您可以验证此图像是否具有exif旋转部分。

我下载图像时

file_put_contents('/local/path/to/file', file_get_contents('/path/to/url/image'));

在我尝试通过Gregwar图像库修复方向之后。

Image::open($path)->fixOrientation()->save($dest, $type, $quality);

我尝试了几个图像,但我总是收到消息

Warning: exif_read_data('/local/path/to/file'): Illegal IFD size

我认为这是一个与我如何检索图像有关的问题,但我也尝试了cUrl和fopen,结果相同。

有人有一些建议吗?


答案 1

您可以使用前面的“@”来忽略警告:@Image::open($path)->fixOrientation()->save($dest, $type, $quality);

这是很多人在互联网上抱怨这一点。可能有一些有错误的exif数据。如果您的操作正在以您想要的方式工作,只需记录它并继续前进即可。


答案 2

PHP 5.6.2x 的 EXIF 功能存在一个错误(有关详细信息,请参阅错误 #72914#72819)。尝试读取EXIF数据将导致所描述的错误之一(非法IFD大小,IFD错误数据,其他)。

目前 (2016-11-21) 没有适用于 5.6 分支的修补程序。分支 7 中正在进行一些测试。

通过测试引发 IFD 错误的函数来实现本地修复,并在确认后假定 EXIF 在脚本期间不可用。

(如果您愿意,可以将其修补到加载程序中,并“重载”函数以返回默认的false/0/null以指示破损)


推荐