PNG是否包含像JPG那样的EXIF数据?

130
我想知道PNG文件是否包含以下数据?
我所做的是将jpg文件转换为png格式,我希望能够检索到与jpg相同的信息,如下所示:
目前使用此as3库读取数据。
IDF0--- IDF @[134 - 248] (9个条目) - 方向(SHORT):1 - XResolution(RATIONAL):72/1 - YResolution(RATIONAL):72/1 - ResolutionUnit(SHORT):2 - 软件(ASCIIx16):QuickTime 7.6.6 - DateTime(ASCIIx20):2011:10:02 22:43:37 - HostComputer(ASCIIx16):Mac OS X 10.6.8 - Exif IFD(LONG):8 34853 - GPS IFD(LONG):248

 

  • EXIF IDF--- IDF @[8 - 134](10 条目)
    • ExifVersion (UNDEFINEDx4) : 0220
    • DateTimeOrigina (ASCIIx20) : 2011:04:14 17:22:01
    • UserComment (UNDEFINEDx63) : ASCII
    • FlashpixVersion (UNDEFINEDx4) : 0100
    • ColorSpace (SHORT) : 1
    • PixelXDimension (LONG) : 1022
    • PixelYDimension (LONG) : 486
    • Unknown (ASCIIx13) : 图像标签-LOL
    • SceneCaptureType (SHORT) : 0

 

  • GPS IDF--- IDF @[248 - 338](7个条目)
    • 互操作性指数 (ASCIIx2) : N
    • 互操作性版本 (RATIONALx3) @425: 52/1, 1144/100, 0/1
    • 未知 (ASCIIx2) : W
    • 未知 (RATIONALx3) : 1/1, 4392/100, 0/1
    • 未知 (RATIONAL) : 5/1
    • 未知 (ASCIIx2) : T
    • 未知 (RATIONAL) : 3694/117

 

6个回答

155

编辑:2017年7月发布的PNG 1.2规范的扩展版本1.5.0终于增加了EXIF块。目前尚不清楚编码器解码器是否开始支持它。

原始内容:PNG不嵌入EXIF信息。但是,它允许在图像内嵌入元数据“”。一些标准化块对应于一些EXIF属性(物理尺寸、时间戳)。还可以将任意文本数据存储为key=>value对,或定义新的块类型。因此,你理论上可以存储任何EXIF信息...但遗憾的是,在您自己的自定义格式中。一些旨在标准化的尝试似乎尚未追赶上。


34

编辑:截至2017年7月,PNG官方支持eXIf块以存储EXIF元数据(规范)。ExifTool 10.59及更高版本会将EXIF写入PNG图像中的这个新块。

ImageMagick在从JPEG图像转换时将EXIF信息存储在PNG的“原始配置文件类型APP1” zTXt块中。 ExifTool(我认为Exiv2也是如此)也支持在PNG图像中存储EXIF的这种方法,但这不是PNG或EXIF规范的一部分。


1
这很好知道!你知道它是否也可以从TIFF中提取吗? - Olivier - interfaSys
5
PNG组最近考虑添加一个新的“eXIf”和/或“zXIf”数据块来存储EXIF信息。为了支持这一点,ExifTool 10.43已经添加了对“exIf”和“zxIf”数据块的支持。 - PhilHarvey

10

PNG不支持嵌入EXIF信息。当你将JPEG转换为PNG时,这些信息就会丢失。


2
嘿,有没有任何文件可以证明这一点?因为我正在处理一个需要读取PNG的EXIF信息的项目,我需要证据来让我的主管知道。如果是这样的话,我可以向他展示并告诉他相关情况。 - user1004413
9
你可以把他引导至规范,其中没有关于EXIF数据嵌入的隐式或显式规定,或者引导他阅读PNG维基页面 - Perception
6
这并非完全正确。例如,如果您使用convert(来自ImageMagick)将JPEG转换为PNG,然后再使用convert将PNG转换回JPEG,新的JPEG仍将具有其中的EXIF数据。 - mofoe
1
在2012年,这个答案可能是正确的,但现在它还准确吗? - RockPaperLz- Mask it or Casket
1
错误,无论是过去还是现在。PNG确实有元数据-只是它不使用EXIF标准。因此,好的转换程序会在适用的情况下将EXIF元数据转换为PNG元数据。(现在PNG有一个eXIf块,但我不确定为什么要添加它。可能是为了在从JPEG或TIFF转换时保留原始EXIF。) - Stewart
显示剩余3条评论

9
截至2017年7月,似乎已经有一个官方注册的EXIF数据块,称为eXIf:
引用: eXIf数据块的数据段包含一个Exif文件格式的配置文件,该格式在[CIPA DC-008-2016]的“压缩数据中APP1的互操作性结构4.7.2”中指定,但是不包括JPEG APP1标记、长度和4.7.2(C)中描述的“Exif ID code”,即“Exif”、NULL和填充字节。
请注意,这既是A)仅几个月前(写作时)的内容,也是B)可选扩展,而不是基本规范的一部分。因此,许多应用程序可能对eXIf块的支持有限。

5

是与否都有可能。

正如其他答案所述,PNG在v1.5.0(2017年)之前并没有正式的EXIF块,直到添加了eXIf,据我所知,这个块仍然没有得到广泛支持。

但这是因为它不需要。许多软件按照惯例使用iTXt(或压缩的zTXt)块将EXIF编码为PNG,并以"Raw profile type APP1"为记号。新的eXIf块旨在提供一个标准化的位置,而在我看来,现在这艘船已经开走了。

此外,EXIF标准的大部分元数据可以通过XMP表示,这是一种替代和更新的元数据传输机制,具有专门用于此目的的EXIF命名空间。多年来,PNG文件已经在iTXt块中包含了XMP文档(包括翻译后的EXIF元数据)。您会发现许多处理器可以在飞行中转换这两种格式。


这些处理器,无论它们是什么,能否将XMP或EXIF转换为/从各种标准PNG元数据块? - Stewart
@Stewart 标准的PNG元数据块是有限的,无法表示EXIF或XMP数据的广泛性。这就是为什么我们在文件中(以文本块形式)历史上编码EXIF / XMP的原因。 - Asteroids With Wings
好的,我会重新表述一下:这些处理器是否将那些能够用标准PNG元数据块表示的XMP或EXIF元数据项转换为标准PNG元数据块,反之亦然? - Stewart
@Stewart 我不知道。我怀疑。如果他们这样做,那么它的功能将非常有限。总的来说,这样做没有任何好处;虽然EXIF和XMP字段可能不是标准的,但它们是完全传统和广泛使用的。所以每个人都只使用它们。PNG元数据确实包括一些关键字/作者信息,但它主要是图像数据。 - Asteroids With Wings

2

你的意思是:

  1. PNG文件是否包含你列出的元数据项?简短回答:因情况而异。
  2. PNG是否使用EXIF标准存储此类元数据?简短回答:通常不会。

通常,PNG使用各种块来存储元数据,这些块是PNG标准的一部分。以下是对列表的解释:

  • 方向 - 不适用于PNG - 固定为从左上角开始的逐行排列。
  • XResolution、YResolution、ResolutionUnit - pHYs块。
  • 软件、主机计算机、其他文本元数据 - tEXt、iTXt、zTXt块。
  • 日期时间 - 对我来说不太清楚是什么时间。tIME表示图像数据的最后修改日期/时间;其他日期/时间可以存储在文本块中。创建时间实际上是一个定义好的文本块键,但格式和时区处理方式没有规定,这是一个不好的设计。
  • ColorSpace、PixelXDimension、PixelYDimension - 不确定这些如何成为元数据。它们对于图像来说是基本的,因此在IHDR块中。
  • 不确定您列出的其他内容的含义。

但令人困惑的是,在最近几年中,官方的扩展块列表中添加了一个eXIf块。这可能是针对将文件从JPEG/TIFF转换为PNG并保留信息而添加的,不打算在最初创建为PNG的文件中使用,但这一点并不清楚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接