PHP exif_read_data非法的IFD大小

时间:2016-05-20 17:18:34

标签: php jpeg exif

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

Here您可以验证此图片是否有exif轮换部分。

我用

下载图片
Dim wb As Workbook, ws1 As Worksheet, ws2 As Worksheet
Dim rng1 As Range, rng2 As Range

Set ws1 = Workbooks("C:\Users\user1\Desktop\" & f_name).Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheets2")

Set rng1 = ws1.Range("A" & i).Offset(chunks - 1, c_cnt - 1)
Set rng2 = ws2.Range("A" & i).Offset(chunks - 1, c_cnt - 1)

ws2.Range("A" & i, rng2).Value = ws1.Range("A" & i, rng1).Value

在我尝试通过Gregwar Image library确定方向后。

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

我尝试了几张图片,但我总是收到消息

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

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

有人有一些建议吗?

5 个答案:

答案 0 :(得分:4)

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

目前(2016-11-21)5.6分支没有可用的修复方法。第7分支正在进行一些测试。

通过测试抛出IFD错误的函数来实现本地修复,并在确认时假设EXIF在脚本持续时间内不可用。

(如果您愿意,可以将其修补到加载程序中,并'重载'函数以返回默认值false / 0 / null而不是表示破坏)

答案 1 :(得分:2)

您可以先使用“@”忽略警告:.//w:tbl

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

答案 2 :(得分:1)

我还使用exif_get_data遇到了这个问题。我可以在我的本地主机(PHP v5.4.15)上处理图像,但在我的网站主机(PHP v5.6.22)上可以处理错误的非法IFD大小&#39;即使我试过&#34; @&#34;忽略警告方法。 我发现在Web主机上(无论是因为版本或安装不同),exif_get_data实际上是抛出异常而不是发出警告。我使用exif数据重新定位图片,如果它被旋转了,所以如果exif数据有问题或不存在我只是忽略它并且什么也不做,这里是代码片段:< / p>

     try {
        $exif = exif_read_data($filePath);
     }
     catch (Exception $exp) {
        $exif = false;
     }
     if ($exif){
        ...
     }

答案 3 :(得分:0)

生产环境中,最好的办法仍然是隐藏警告!

所以我将他的错误报告更改为ERRORS,仅在脚本开始时使用以下行:

vstest.console /listdiscoverers

答案 4 :(得分:-1)

您可以使用if not request.session.session_key: request.session.save() session_id = request.session.session_key

发现错误
set_error_handler