如何使用 PHP 获取 EXIF 快门计数(imageNumber)?

Posted

技术标签:

【中文标题】如何使用 PHP 获取 EXIF 快门计数(imageNumber)?【英文标题】:How to get the EXIF shutter count (imageNumber) using PHP? 【发布时间】:2022-01-20 21:19:48 【问题描述】:

我已经能够使用exif_read_data() 获取EXIF 数据。根据 php 文档中提供的EXIF documentation,必须有一个imageNumber 标签(我知道这不能保证),但我无法在我的测试图像上看到类似的东西(来自尼康的未经编辑的 JPG D5100)。根据在线快门计数网站,同一张图片似乎携带有关快门计数的信息。

如果您能阐明我可能做错了什么以获得此号码,我将不胜感激。或者他们在图像元中存储快门计数的任何其他地方或方法?

编辑:

这是我试图解决的代码,我正在尝试获取imageNumber,这显然无法获取。但是在线工具会在同一张图像上显示快门计数。我想使用 PHP(甚至使用另一种语言)获得相同的结果。任何帮助表示赞赏。

$exif_data = exif_read_data ( $_FILES['fileToUpload']['tmp_name']);
print_r( $exif_data);

【问题讨论】:

如果您没有链接到任何内容(既不是您的文件,也不是一个网站),那么这个 Q 就太笼统了 - 人们必须能够复制您的体验。元数据并不暗示 Exif,枚举所有属性间接告诉您哪些未使用 - 不能保证属性 0x9211 ImageNumber 已存储。 @AmigoJack 请检查代码的编辑。我找不到原点,这就是为什么我没有在编辑之前发布链接。但这里是它指向Exif2 的文档虽然我知道这个imageNumber 标签并不能保证,但不知何故,这些在线工具(如camerashuttercount)会在同一张图像上显示快门计数。你知道他们是怎么做到的吗?相机制造商还有其他存储快门次数的方法吗? 是的:在0x927c MakerNote(文字第27页,PDF中的数字第33页)每个制造商都有自己的专有结构来存储数据,您必须找到能够读取的好软件它(即ExifTool)。因此,我们需要您的文件的一个示例(将图片上传到图片托管商时,您必须检查诸如 Exif 之类的元数据没有被剥离)。 @AmigoJack 我有来自相机的uploaded an image。在标签 MakeNote 下,它只有 Nikon 作为数据。请查看我的图片,看看您是否知道在哪里可以找到快门数。 【参考方案1】:

根据您的示例文件,它特定于 NikonMakerNote,并且特定于 D5100 型号。在详细模式下使用ExifTool 显示结构:

> exiftool -v DSC_8725.JPG
...
JPEG APP1 (65532 bytes):
  ExifByteOrder = MM
  + [IFD0 directory with 11 entries]
  | 0)  Make = NIKON CORPORATION
  | 1)  Model = NIKON D5100
...
  | 9)  ExifOffset (SubDirectory) -->
  | + [ExifIFD directory with 41 entries]
...
  | | 16) MakerNoteNikon (SubDirectory) -->
  | | + [MakerNotes directory with 55 entries]
...
  | | | 38) ShotInfoD5100 (SubDirectory) -->
  | | | + [BinaryData directory, 8902 bytes]
...
  | | | | ShutterCount = 41520
JPEG 解释,见片段APP1: Exif 解释,见标签0x927c: Nikon's MakerNote 解释,见标签0x0091: ShotInfoD5100 解释,见索引801

MakerNotes 是专有的:如何存储数据取决于每个制造商。这些文档很少见——主要是业余爱好者对该信息进行逆向工程——这就是为什么只有选定的软件才能完全读取选定模型的信息。此时您可能会意识到存在数十个具有数十个模型的制造商,为此您必须以不同的方式解释字节 - 这是很多工作!根据exif_read_data()s ChangeLog PHP 7.2.0 根本没有声称支持 Nikon

您必须自己解析MakerNote 或找到已经为您完成此操作的PHP 代码/库/软件。作为最后的手段,您可以执行非PHP 软件(例如ExifTool)来获得您想要的。

【讨论】:

非常感谢您在这方面分享知识和教育我。我了解该项目的深度,并且我将其视为一个宠物项目,但了解它的范围,我将不得不将其保留一段时间,似乎考虑到我必须腾出的时间有限。再次感谢您在这里教育我。干杯伙伴!

以上是关于如何使用 PHP 获取 EXIF 快门计数(imageNumber)?的主要内容,如果未能解决你的问题,请参考以下文章

索尼微单 怎么看快门次数

索尼微单怎么看快门次数?

宾得kx怎么测快门数

如何使用 IPTC/EXIF 元数据对照片进行分类?

使用PHP获取图像文件的EXIF信息

使用PHP获取图像文件的EXIF信息