我正在尝试使用PHP检索图片中使用的相机镜头。
我的第一个动作是使用带有以下代码的exif_read_data:
$image_file = $_FILES['photo']['tmp_name'];
$exif = exif_read_data($image_file,true);
$lens = $exif["EXIF"]["UndefinedTag:0xA434"];
效果很好,直到出现该图像:https://ibb.co/X4VMz0T
此图像的exif未被破坏,因为我可以从一个随机的exif查看器站点(例如http://metapicz.com/)获得Lens参考。
然后我决定使用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文件夹和add.php上的第115行:
$exif = exif_read_data($image_file,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);