确定文件在Java中是否支持Exif头



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

我想要的是可靠地检查一个文件是否支持Exif头(如果它在头中还不可用,它是否会被支持)。

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

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

提前感谢!

是否可以可靠地确定文件是否支持Exif头而不检查文件类型?

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


请注意,支持Exif元数据的每种文件格式通常将其包装在"native"(就像在格式自己的容器结构中一样),因此通常必须为要添加Exif元数据的每种格式添加自定义代码。唯一的例外是TIFF,因为Exif元数据是基于TIFF格式的。参见维基百科上的Exif。

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

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

  • JFIF (JPEG):在APP1段中,前缀"Exif"
  • PNG, JNG, MNG:在文本块(iTXt,zTXt,tEXt)与关键字exifAPP1,或在自己的块(eXIf,zXIf,zxIf)
  • 资源ID为0x04220x0423的PSD:
  • TIFF和许多格式借用(CR2, ORF, DNG, RAW, JXR, NIFF, MDI):在标签0x8769(和0x8825的GPS和0xA005的互操作性)
  • 格式使用QTFF(即JP2, JXS, JXL, HEIF, QTIF图片或MOV/QT/3GP/MP4/AVC/MJ2容器):在原子exifexfc中,或通过原子uuid, UUID为"x05x37xcdxabx9dx0cx44x31xa7x2axfax56x1fx2ax11x3e"或字面上类似于16字节的"JpgTiffExif->JP2"
  • 格式使用RIFF(即WebP图片或AVI容器或WAV, SBK, SB2, AIFF/AIFC, 8SVX音频):要么是exif列表与几个自己的块,或EXIF

此列表可能不完整。你要的是Exif支持XMP是一个独立的话题。

最新更新