gpt4 book ai didi

image - EXIF 和缩略图

转载 作者:行者123 更新时间:2023-12-04 02:27:15 26 4
gpt4 key购买 nike

我正在研究照片查看器。在这种情况下,我编写了一个小类来读取和使用一些 EXIF 数据,例如图像方向。这门课很适合阅读。

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

但这引发了一些我难以回答的问题,即:

  • EXIF 数据是否可以包含 1 个以上的缩略图,如果是,图像可以包含的最大缩略图数是多少?
  • 缩略图支持哪些格式? (我找到了 JPEG 和 TIFF,还有其他的吗?)
  • EXIF 标准中是否有任何保证缩略图始终写入后期 EXIF 数据中,就在主图像之前?
  • 如果不是,则每个包含指向要替换的缩略图之外的位置的偏移量的标签都应该更新。那么,是否有一种标准的方法来遍历所有标签和子目录,识别哪些 EXIF 标签包含偏移量,并在需要时更新它们?或者唯一的方法是读取最多的标签并只重写已知的标签?
  • 或者有没有办法保证新旋转的缩略图的大小将小于或等于之前替换的缩略图大小?

  • 问候

    最佳答案

    以下是您的问题的一些答案:

    1) EXIF 数据的布局类似于 2 页的 TIFF 文件。第一页是摄像机信息,第二页是缩略图。如果您添加更多页面(带缩略图),99.99% 的应用程序可能不会注意到,因为您的做法与“标准”方式不同。至于“最大计数”,您有 64k 的数据可以存储在任何 JFIF 标签中。你可以把你想要的东西放在那个 64k 中。

    2) 只有 1 种支持的 EXIF 缩略图格式:TIFF。在 TIFF 内部可以有压缩 (JPEG) 或未压缩的数据。同样,欢迎您将 LZW 压缩的数据粘贴在那里,但大多数应用程序可能不会准备好正确显示它。

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

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

    5) 只要您使 EXIF APP1 标签数据的总大小适合 64k,您就可以对缩略图的大小/方向做任何想做的事情。

    这是你需要做的...

    1)阅读源图像(如果有缩略图)。
    2)准备旋转的图像(和缩略图)。
    3) 用新的缩略图图像写入新的元数据。
    4) 写入新的主图像。

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

    关于image - EXIF 和缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32512013/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com