我现在已经找到了一种注入元数据的方法.但是,它会将图像副本复制到内存中.对于大图像,并且需要在内存中已经有副本,这将具有性能,并可能导致内存崩溃.
是否有正确的方法来注入元数据而无需复制图像?也许它可以在写入磁盘后添加到文件中?
我更喜欢原生实现,如果可能的话,不必为此而诉诸第三方库.
解决方法 根据您的需要,此问题可能需要少量或大量代码. 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 – 如何在不复制图像的情况下将exif元数据注入图像?全部内容,希望文章能够帮你解决ios – 如何在不复制图像的情况下将exif元数据注入图像?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)