判断文件是否支持 Java 中的 Exif header
Determining whether file supports Exif header in Java
我正在使用 Java 和库 metadata extractor 来处理文件元数据。
我想要的是可靠地检查文件是否支持 Exif header(如果它在 header 中不可用,是否支持)。
据我所知,Exif header 受 JPEG 和 TIFF 以及一些 PNG(以及其他)支持。
目前我只是检查 JPEG 或 TIFF 的文件类型(通过使用 FileTypeDetector::detectFileType
),但是是否可以在不检查文件类型的情况下可靠地确定文件是否支持 Exif header ?那么其他支持Exif格式的文件也可以考虑header
提前致谢!
Is it possible to reliably determine whether the file supports the Exif header without checking the file type?
没有。无法通过检查文件来“检测”文件是否支持 Exif 元数据(术语“Exif header”用词不当)。我认为您当前确定文件格式并保留您知道支持 Exif 的格式列表的方式很有意义。
请注意,支持 Exif 元数据的每种文件格式通常将其包装在“本机”(如格式自身的)容器结构中,因此您通常必须为要添加 Exif 元数据的每种格式添加自定义代码.唯一的例外是 TIFF,因为 Exif 元数据基于 TIFF 格式。另见 Wikipedia on Exif。
当然,技术上可以将 Exif 元数据附加或插入到 任何 文件,但是,这通常会导致文件损坏或 Exif 元数据将被忽略其他软件。
Exif 所支持的文件格式比您想象的要多,而且大多数软件都不希望如此。它也可能不止一次出现,尽管没有什么意义,也不是任何 reader.
所期望的
- JFIF (JPEG):在前缀为
"Exif[=10=][=10=]"
的 APP1 片段中
- PNG, JNG, MNG:在带有关键字
exif
或 APP1
的文本块(iTXt
、zTXt
、tEXt
)中,或者在他们自己的区块 (eXIf
, zXIf
, zxIf
)
- PSD:在 ID 为
0x0422
或 0x0423
的资源中
- TIFF and many formats borrowing from that (CR2, ORF, DNG, RAW, JXR, NIFF, MDI):在标签
0x8769
中(GPS 为 0x8825
,互操作性为 0xA005
)
- 使用 QTFF (i.e. JP2, JXS, JXL, HEIF, QTIF pictures or MOV/QT/3GP/MP4/AVC/MJ2 容器的格式):在原子
exif
或 exfc
中,或者通过具有 "\x05\x37\xcd\xab\x9d\x0c\x44\x31\xa7\x2a\xfa\x56\x1f\x2a\x11\x3e"
或 UUID 的原子 uuid
一个字面上类似于 16 个字节 "JpgTiffExif->JP2"
- 使用 RIFF (i.e. WebP pictures or AVI containers or WAV, SBK, SB2, AIFF/AIFC, 8SVX 音频的格式):带有几个自己的块的
exif
列表,或者 EXIF
块
此列表可能不完整。你单独要求 Exif - 支持 XMP 本身就是一个主题。
我正在使用 Java 和库 metadata extractor 来处理文件元数据。
我想要的是可靠地检查文件是否支持 Exif header(如果它在 header 中不可用,是否支持)。
据我所知,Exif header 受 JPEG 和 TIFF 以及一些 PNG(以及其他)支持。
目前我只是检查 JPEG 或 TIFF 的文件类型(通过使用 FileTypeDetector::detectFileType
),但是是否可以在不检查文件类型的情况下可靠地确定文件是否支持 Exif header ?那么其他支持Exif格式的文件也可以考虑header
提前致谢!
Is it possible to reliably determine whether the file supports the Exif header without checking the file type?
没有。无法通过检查文件来“检测”文件是否支持 Exif 元数据(术语“Exif header”用词不当)。我认为您当前确定文件格式并保留您知道支持 Exif 的格式列表的方式很有意义。
请注意,支持 Exif 元数据的每种文件格式通常将其包装在“本机”(如格式自身的)容器结构中,因此您通常必须为要添加 Exif 元数据的每种格式添加自定义代码.唯一的例外是 TIFF,因为 Exif 元数据基于 TIFF 格式。另见 Wikipedia on Exif。
当然,技术上可以将 Exif 元数据附加或插入到 任何 文件,但是,这通常会导致文件损坏或 Exif 元数据将被忽略其他软件。
Exif 所支持的文件格式比您想象的要多,而且大多数软件都不希望如此。它也可能不止一次出现,尽管没有什么意义,也不是任何 reader.
所期望的- JFIF (JPEG):在前缀为
"Exif[=10=][=10=]"
的 APP1 片段中
- PNG, JNG, MNG:在带有关键字
exif
或APP1
的文本块(iTXt
、zTXt
、tEXt
)中,或者在他们自己的区块 (eXIf
,zXIf
,zxIf
) - PSD:在 ID 为
0x0422
或0x0423
的资源中
- TIFF and many formats borrowing from that (CR2, ORF, DNG, RAW, JXR, NIFF, MDI):在标签
0x8769
中(GPS 为0x8825
,互操作性为0xA005
) - 使用 QTFF (i.e. JP2, JXS, JXL, HEIF, QTIF pictures or MOV/QT/3GP/MP4/AVC/MJ2 容器的格式):在原子
exif
或exfc
中,或者通过具有"\x05\x37\xcd\xab\x9d\x0c\x44\x31\xa7\x2a\xfa\x56\x1f\x2a\x11\x3e"
或 UUID 的原子uuid
一个字面上类似于 16 个字节"JpgTiffExif->JP2"
- 使用 RIFF (i.e. WebP pictures or AVI containers or WAV, SBK, SB2, AIFF/AIFC, 8SVX 音频的格式):带有几个自己的块的
exif
列表,或者EXIF
块
此列表可能不完整。你单独要求 Exif - 支持 XMP 本身就是一个主题。