EXIF不会使用PHP返回返回方向详细信息

时间:2018-11-06 18:28:43

标签: php exif uiimageorientation

我正在尝试使用PHP exif_read_data()函数获取图像方向的详细信息,但不幸的是,我无法获得所需的详细信息。我只得到

Array
(
    [FILE] => Array
        (
            [FileName] => sasfasdfasd-asdf-asdasdf-afdsd-767563900.jpg
            [FileDateTime] => 1541527956
            [FileSize] => 302871
            [FileType] => 2
            [MimeType] => image/jpeg
            [SectionsFound] => COMMENT
        )

    [COMPUTED] => Array
        (
            [html] => width="1000" height="750"
            [Height] => 750
            [Width] => 1000
            [IsColor] => 1
        )

    [COMMENT] => Array
        (
            [0] => CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 100

        )

)

我正在使用PHP 7.2 有人可以告诉我如何使用PHP获取图像方向详细信息吗? 我已经检查了我的GD库以及使用PHP信息的EXIF。他们工作正常。

1 个答案:

答案 0 :(得分:0)

不幸的是,您创建的映像是使用LibGD完成的,默认情况下,它不会写入任何扩展的EXIF数据。

作为PHP随附的EXIF扩展程序的维护者,我可以向您深入了解它的工作原理:

当您使用exif_read_data()加载图像时,默认情况下会返回上述部分(您所用的COMMENT除外;它是由LibGD生成的)。如果在图像的二进制元数据中找到MAKERNOTE部分,则PHP将尝试将值解析为PHP [1]的一种已知格式。

如果签名随后与一种已知格式匹配,则PHP将从标头读取所有相关的IFD(图像文件数据)数据,并尝试根据烘焙的标签列表解析某些标签名称。这使得返回的数组更加依赖于工作,而不必像编写echo $exif['0x0112'];(方向)这样的代码,而是使数组变成类似echo $exif['Orientation'];的东西。

但是,如果签名不匹配,则PHP仍将尝试读取图像中的相关EXIF数据,但是对于非标准标签,不会映射标签。考虑到二进制数据遵循EXIF规范,PHP还将继续读取缩略图数据等内容。

最后; PHP的EXIF扩展名是只读的,因此即使您从有问题的图像知道方向,您也无法使用PHP附带的默认扩展名手动编写它。

[1] http://git.php.net/?p=php-src.git;a=blob;f=ext/exif/exif.c;h=d37a61f83da7bd8c14eeaa0d14762e3a4e7c80e6;hb=HEAD#l1336