1

我正在使用 Java 和库元数据提取器来处理文件元数据。

我想要的是可靠地检查文件是否支持 Exif 标头(如果标头中尚不可用,是否支持它)。

据我所知,JPEG 和 TIFF 以及一些 PNG(以及其他)支持 Exif 标头。

目前我只是检查 JPEG 或 TIFF 的文件类型(通过使用 FileTypeDetector::detectFileType),但是否可以在不检查文件类型的情况下可靠地确定文件是否支持 Exif 标头?然后也可以考虑也支持 Exif 标头的其他格式的文件。

提前致谢!

4

2 回答 2

2

是否可以在不检查文件类型的情况下可靠地确定文件是否支持 Exif 标头?

不。没有办法通过检查文件来“检测”文件是否支持 Exif 元数据(术语“Exif 标头”是用词不当)。我认为您当前确定文件格式的方式,并保留您知道支持 Exif 的格式列表是有意义的。


请注意,支持 Exif 元数据的每种文件格式通常将其包装在“本机”(如格式自己的)容器结构中,因此您通常必须为要添加 Exif 元数据的每种格式添加自定义代码。唯一的例外是 TIFF,因为 Exif 元数据基于 TIFF 格式。另请参阅有关 Exif 的 Wikipedia

当然,技术上可以将 Exif 元数据附加或插入到任何文件中,但这通常会导致文件损坏或 Exif 元数据将被其他软件忽略。

于 2021-08-04T07:28:42.333 回答
1

支持Exif的文件格式比您想象的要多,而且大多数软件并不期望如此。它也可能不止一次出现,尽管没有什么意义,也不是任何读者所期望的。

  • JFIF (JPEG):在带有前缀的 APP1 段中"Exif\0\0"
  • PNG , JNG , MNG :在带有关键字or的文本块 ( iTXt, zTXt, ) 中,或在它们自己的块 ( , , )中tEXtexifAPP1eXIfzXIfzxIf
  • PSD:在具有 ID 的资源中0x04220x0423
  • TIFF和许多从中借用的格式(CR2ORFDNGRAWJXRNIFFMDI):在标签中0x8769(以及0x8825用于 GPS 和0xA005互操作性)
  • 使用QTFF的格式(即JP2JXSJXLHEIFQTIF图片或MOV/QT/3GP/MP4/AVC/MJ2容器):在原子中exifexfc,或通过uuid具有 UUID"\x05\x37\xcd\xab\x9d\x0c\x44\x31\xa7\x2a\xfa\x56\x1f\x2a\x11\x3e"或其中之一的原子,字面上类似于16 个字节"JpgTiffExif->JP2"
  • 使用RIFF的格式(即WebP图片或AVI容器或WAVSBKSB2AIFF/AIFC8SVX音频):exif具有几个自己的块的列表或一个EXIF

此列表可能不完整。而您只要求Exif - 对XMP的支持本身就是一个主题。

于 2021-08-12T09:15:43.747 回答