EXIF和缩略图

让·米洛斯特·雷蒙德

我正在使用照片查看器。在这种情况下,我编写了一个小类,能够读取和使用一些EXIF数据,例如图像方向。本课程非常适合阅读。

但是,我将添加一个新选项来旋转照片。我想旋转并写入照片数据本身,而不仅仅是重写方向标签。我已经编写了旋转和保存主要JPEG图像的代码,并且效果很好。但是我还需要旋转EXIF数据中包含的缩略图(如果有),以保持图像的连贯性。因此,我需要写入EXIF数据以替换现有的缩略图。

但这提出了一些问题,我很难回答,即:

  • EXIF数据可以包含多个缩略图吗?如果是,则图像可以包含的最大缩略图数是多少?
  • 缩略图支持哪些格式?(我找到了JPEG和TIFF,还有其他吗?)
  • EXIF标准中是否可以保证缩略图总是写在最新的EXIF数据中,就在主图像之前?
  • 如果不是,则应更新每个包含偏移量的标签,这些偏移量指向要替换的缩略图之外的位置。因此,是否存在一种标准方法来遍历所有标记和子目录,以识别哪些EXIF标记包含偏移量,并在需要时进行更新?还是唯一的方法是读取最多的标签并仅重写已知的标签?
  • 还是有办法保证新旋转的缩略图的大小小于或等于要替换的以前的缩略图的大小?

问候

比特银行

这是您的问题的一些答案:

1)EXIF数据的布局类似于TIFF文件,共有2页。第一页是相机信息,第二页是缩略图。如果您添加更多页面(带有缩略图),则99.99%的应用程序可能不会注意到,因为您将采取与“标准”方式不同的方式。就“最大计数”而言,您有64k的数据可以存储在任何JFIF标签中。您可以将所需的内容放入该64k中。

2)仅支持1种EXIF缩略图格式:TIFF。在TIFF内部,可以压缩(JPEG)或未压缩的数据。同样,欢迎您将LZW压缩的数据放在此处,但是大多数应用程序可能不准备正确显示它们。

3)JFIF容器格式允许带有元数据的标签出现在主图像之前。APPx标记包含可以遵循或不遵循标准的元数据。欢迎您将多个EXIF APP1标签粘贴到文件中,但是同样,大多数应用程序将无法正确处理这种情况。因此,简单的答案是EXIF数据(包括缩略图)必须位于主图像之前,并且如果您放置了多个缩略图,则很可能会忽略它。

4)如果要修改JFIF(包括元数据),则必须重写元数据。实际上,这非常简单,因为每个标签都是独立的,并且具有简单的长度值而不是相对偏移量。

5)只要将EXIF APP1标签数据的总大小设置在64k以内,您就可以对缩略图的大小/方向进行任何操作。

这是您需要做的...

1)读取源图像(以及缩略图(如果存在))。
2)准备旋转的图像(和缩略图)。
3)用新的缩略图写入新的元数据。
4)编写新的主图像。

如果要保留原始元数据以及新的缩略图,这很容易。只需阅读原始标签并保留它们,然后将它们写入新图像即可。每个JFIF标签只是一个2字节的标识符(FFxx),后跟2字节的长度,然后是数据。它们几乎可以以任何顺序包装,并且在主图像之前可以显示多少个总标签没有硬性限制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章