- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究照片查看器。在这种情况下,我编写了一个小类来读取和使用一些 EXIF 数据,例如图像方向。这门课很适合阅读。
但是,我会添加一个新选项来旋转照片。我想旋转和写入照片数据本身,而不仅仅是重写方向标签。我已经编写了用于旋转和保存主 JPEG 图像的代码,并且运行良好。但我还需要旋转 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/
我是一名优秀的程序员,十分优秀!