我找到了许多资源,但没有什么能帮助我找到我想要的东西。我试图理解.png和.jpg文件格式足以能够修改和/或读取文件中的exif或其他元数据,或者如果可能的话创建我自己的元数据。
我想在Android应用程序的上下文中执行此操作,因此我们可以保留,如果有,但它实际上并不是独占的。我试图找出如何使用一个简单的输入流字节数组,并从那里去。
Android本身必须至少在从流中创建bmp图像的某个时刻提取RGB像素信息,我看了一下BitMapFactory源代码来尝试理解它,但是在深入研究Native之后我迷失了方向文件。
我认为根据我的研究,bmps正在丢失文件中的任何exif / meta数据。所以我想我想通过字节数组打破输入流并删除元数据。在.pngs中,我知道没有“标准”,但基于此page,似乎可以存储元数据的某种组织。
尽管如此,我不介意只留下exif / png标准,并尝试以某种标准化的方式存储我自己的信息,但我需要更多地了解图像阅读器如何将文件标识为jpg,png等。然后确定像素信息的位置。
所以我想我的第一个问题是,有没有人做过类似的事情,以便他们可以提交给我?如果没有,是否有人知道任何可能有益于教育目的的好图书库,以找出如何定位和提取这些数据?
或者更基本的是,使用类似字节数组的方式以编程方式查找元数据和/或exif标准甚至rgb数据的好方法是什么?
答案 0 :(得分:1)
在你的问题中有很多事情需要解决,但首先我应该澄清,当你说“Android本身必须至少提取RGB像素信息”时,你所指的是减压行为,这在JPEG的情况下是复杂的,并且即使对于PNG也是非常重要的。我认为在尝试进一步(尤其是关于标题,语法,文件结构等的部分)之前,阅读JPEG和PNG的wikipedias非常有用。
话虽如此,你有正确的想法。在图像的标题中读取字节数组/流,进行一些更改并替换旧文件应该不会太困难。 PNG文件可以通过前8个字节来识别,并且应该有类似的方式来识别JPEG - 我无法记住我的头脑。
要修改PNG元数据,您必须了解“块” - 类型/名称,排序,格式,CRC等.libpng网站有一些很好的资源,这里是一般的PNG info,以及chunk specifications。如果你做了任何改动,请确保不要忘记重新计算CRC。
JPEG文件使用“标记”关闭文件,标记长度为两个字节,始终以FF开头。 Exif只是一个常规JPEG文件,具有更具体的元数据结构,这似乎是一个合理的介绍:Exit/TIFF
可能有Android / Java库可以方便地为您解决这个问题,但我从未使用过任何自己的库。快速谷歌搜索会出现this,如果您不想花时间自己编写解析器,我确信还有很多其他选项。