PHP / PEL如何从exif获取相机镜头?

我正在尝试使用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);
liuguosongg 回答:PHP / PEL如何从exif获取相机镜头?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1454341.html

大家都在问