EXIF не возвращает детали ориентации с PHP - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь получить сведения об ориентации изображения с помощью функции 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, а также EXIF, используя информацию PHP. Они работают нормально.

1 Ответ

0 голосов
/ 30 января 2019

К сожалению, созданный вами образ создан с использованием LibGD, который по умолчанию не записывает какие-либо расширенные данные EXIF.

Как сопровождающий расширения EXIF, поставляемого с PHP, я могу немного рассказать вам о том, как это работает под капотом:

Когда вы загружаете изображение, используя exif_read_data(), тогда по умолчанию возвращаются вышеупомянутые разделы (за исключением COMMENT в вашем случае, так как оно генерируется LibGD). Если в двоичных метаданных изображения обнаружен раздел MAKERNOTE, то PHP попытается преобразовать значение в один из известных форматов в PHP [1].

Если подпись сопоставляется с одним из известных форматов, тогда PHP будет считывать все соответствующие данные IFD (данные файла изображения) из заголовка и пытаться разрешить некоторые из имен тегов в соответствии с запеченным в списке тегов. , Это делает возвращаемый массив намного более зависимым для работы, вместо того, чтобы писать код вроде echo $exif['0x0112']; (ориентация), массив становится примерно таким: echo $exif['Orientation'];.

Если подпись не совпадает, тогда PHP все равно будет пытаться прочитать соответствующие данные EXIF ​​в изображении, однако теги не будут отображаться для нестандартных тегов. PHP также продолжит читать такие вещи, как миниатюры и т. Д., Учитывая, что двоичные данные соответствуют спецификации EXIF.

Наконец; Расширение PHP EXIF ​​доступно только для чтения, поэтому, даже если вам нужно узнать свою ориентацию по рассматриваемому изображению, вы не можете написать его вручную с расширением по умолчанию, которое поставляется с PHP, я боюсь.

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

...