我正在使用照片查看器。在这种情况下,我编写了一个小类,能够读取和使用一些EXIF数据,例如图像方向。本课程非常适合阅读。
但是,我将添加一个新选项来旋转照片。我想旋转并写入照片数据本身,而不仅仅是重写方向标签。我已经编写了旋转和保存主要JPEG图像的代码,并且效果很好。但是我还需要旋转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] 删除。
我来说两句