ios – 如何在不复制图像的情况下将exif元数据注入图像?

前端之家收集整理的这篇文章主要介绍了ios – 如何在不复制图像的情况下将exif元数据注入图像?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我之前问过这个问题: How to write exif metadata to an image.

我现在已经找到了一种注入元数据的方法.但是,它会将图像副本复制到内存中.对于大图像,并且需要在内存中已经有副本,这将具有性能,并可能导致内存崩溃.

是否有正确的方法来注入元数据而无需复制图像?也许它可以在写入磁盘后添加文件中?

我更喜欢原生实现,如果可能的话,不必为此而诉诸第三方库.

解决方法

根据您的需要,此问题可能需要少量或大量代码. EXIF数据存储在JPEG APP1标记(FFE1)中.它看起来非常像带有TIFF标题,IFD和带有数据的单个标签的TIFF文件.如果您可以构建自己的APP1标记段,那么插入它或将其替换为JPEG文件是微不足道的.如果您希望从现有文件中读取元数据,请添加一些新标记,然后将其写回,这可能会更复杂. EXIF数据的棘手部分是那些需要超过4个字节的标签.每个TIFF标记为12个字节:2字节标记,2字节数据类型,4字节计数,4字节数据.如果数据不完全适合标记的4个字节,则标记指定文件中的绝对偏移量,以查找数据的位置.如果现有数据包含任何带有此类数据的标签(例如品牌,型号,捕获日期,捕获时间等),则需要通过修复偏移重新打包该数据,然后添加自己的数据.简而言之:

1)如果要将预先制作的APP1标记添加到JPEG文件中,这很简单,只需要很少的代码.

2)如果你需要从JPEG文件中读取现有的元数据,添加自己的元数据并将其写回,代码更复杂一些.这并不“困难”,但它涉及的不仅仅是读取和写入数据块.

首先阅读TIFF 6.0规范以了解标记和目录结构:

TIFF 6.0 spec

接下来,看看JPEG EXIF规范:

EXIF 2.2 Spec

猜你在找的iOS相关文章