PHP/PEL Как получить объектив камеры из exif?

Я пытаюсь получить объектив камеры, используемый на изображении, с помощью PHP.

Моим первым ходом было использование exif_read_data с этим кодом:

$image_file = $_FILES['photo']['tmp_name'];
$exif = exif_read_data($image_file, 0, true);
$lens = $exif["EXIF"]["UndefinedTag:0xA434"];

Это работало хорошо, пока не появилось это изображение: https://ibb.co/X4VMz0T

Exif этого изображения не был поврежден, потому что я мог получить ссылку на объектив со случайного сайта просмотра exif (например, этого: http://metapicz.com/).

Тогда я решил использовать PEL, чтобы получить exif пропавшего. Вот мой код с использованием PEL:

$jpeg = new PelJpeg($_FILES['photo']['tmp_name']);
$exif = $jpeg->getExif();
$tiff = $exif->getTiff();
$ifd0 = $tiff->getIfd();
$subIFD1 = $ifd0->getSubIfd(2);
$subIFD = $subIFD1->getSubIfd(5);
$entry = $subIFD->getEntry(149);
$lens = $entry->getText();

Хотя этот код хорошо работал с предыдущим изображением, я знал, что не могу полностью его контролировать. К моему величайшему отчаянию, новое изображение сломало два предыдущих кода, и теперь я не знаю, как правильно получить модель объектива из exif. Вот изображение, которое не работает: https://ibb.co/Fm3rQNc Вот ошибка php, которую я получаю:

PHP Warning:  exif_read_data(phppTDMme): IFD data bad offset: 0xFFFFFC72 length 0x1DD0 in add.php on line 115
PHP Warning:  Division by zero in php_exif/src/PelCanonMakerNotes.php on line 229
PHP Fatal error:  Uncaught lsolesen\pel\PelMakerNotesMalformedException: Size of Canon Camera Settings does not match the number of entries. in php_exif/src/PelCanonMakerNotes.php:230
Stack trace:
#0 php_exif/src/PelCanonMakerNotes.php(198): lsolesen\pel\PelCanonMakerNotes->parseCameraSettings(Object(lsolesen\pel\PelIfd), Object(lsolesen\pel\PelDataWindow), 2, 0)
#1 php_exif/src/PelIfd.php(406): lsolesen\pel\PelCanonMakerNotes->load()
#2 php_exif/src/PelTiff.php(159): lsolesen\pel\PelIfd->load(Object(lsolesen\pel\PelDataWindow), 10)
#3 php_exif/src/PelExif.php(108): lsolesen\pel\PelTiff->load(Object(lsolesen\pel\PelDataWindow))
#4 php_exif/src/PelJpeg.php(216): lsolesen\pel\PelExif->load(Object(lsolesen\pel\PelDataWindow))
#5 php_exif/src/PelJpeg.php(286): lsolesen\pel\PelJpeg->load(Object(lsolesen\p in php_exif/src/PelCanonMakerNotes.php on line 230

С php_exif моя папка PEL и строка 115 на add.php вот эта:

$exif = exif_read_data($image_file, 0, true);

большое спасибо

Редактировать:

После некоторых тестов могу сказать, что ошибка только из-за этой строчки:

$jpeg = new PelJpeg($_FILES['photo']['tmp_name']);

Поскольку этот код работает со всеми изображениями, кроме последнего изображения (https://ibb.co/Fm3rQNc): (Это дает мне ошибку чуть выше)

require_once 'autoload.php';

use lsolesen\pel\PelDataWindow;
use lsolesen\pel\PelJpeg;
use lsolesen\pel\PelTiff;

$file = "test.jpg";

$jpeg = new PelJpeg($file);

0 ответов

Другие вопросы по тегам