android - 以 png 和 jpg 格式存储信息

标签 android png metadata jpeg exif

我找到了很多资源,但没有任何资源对我正在寻找的东西有很大帮助。我试图充分理解 .png 和 .jpg 文件格式,以便能够修改和/或读取文件中的 exif 或其他元数据,或者在可能的情况下创建我自己的元数据。

我想在 Android 应用程序的上下文中执行此操作,以便我们可以保留该应用程序,但它实际上并不是唯一的。我试图弄清楚如何使用简单的输入流字节数组来做到这一点,然后从那里开始。

Android 本身在从流中创建 bmp 图像时至少必须在某个时刻提取 RGB 像素信息,我查看了 BitMapFactory 源代码以尝试理解它,但在深入研究 Native 后我迷失了方向文件。

根据我的研究,我认为 bmp 正在丢失文件中的所有 exif/元数据。所以我想我想通过字节数组分解输入流并删除元数据。在.pngs中,我知道没有“标准”,但基于此 page似乎您可以存储某种元数据组织。

话虽如此,我不介意只留下 exif/png 标准并尝试以某种标准化的方式存储我自己的信息,但我需要更多地了解图像读取器如何将文件标识为jpg、png 等。然后确定像素信息所在的位置。

所以我想我的第一个问题是,是否有人以前做过类似的事情以便他们可以将我归档?如果没有,是否有人知道任何好的图书馆可能有助于教育目的,以找出如何定位和提取这些数据?

或者更基本的是,使用字节数组之类的东西以编程方式查找元数据和/或 exif 标准甚至 rgb 数据的好方法是什么?

最佳答案

你的问题有很多问题需要解决,但首先我应该澄清,当你说“Android本身必须至少提取RGB像素信息”时,你指的是解压缩行为,对于 JPEG 来说这很复杂,即使对于 PNG 来说也很复杂。我认为阅读维基百科 JPEG 对您非常有用。和 PNG,然后再尝试进一步讨论(特别是有关标题、语法、文件结构等的部分)。

话虽如此,您的想法是正确的。将图像的 header 作为字节数组/流读取、进行一些更改并替换旧文件应该不会太困难。 PNG 文件可以通过前 8 个字节来识别,并且应该有类似的方法来识别 JPEG - 我记不清了。

要修改 PNG 元数据,您必须了解“ block ” - 类型/名称、排序、格式、CRC 等。libpng 网站对此有一些很好的资源,这里是常规 PNG info ,以及chunk specifications 。确保在更改任何内容时不要忘记重新计算 CRC。

JPEG 使用“标记”对文件进行分段,“标记”长度为两个字节,并且始终以 FF 开头。 Exif 只是一个常规的 JPEG 文件,具有更具体的元数据结构,这似乎是一个合理的介绍:Exit/TIFF

可能有适用于 Android/Java 的库可以方便地为您处理此问题,但我自己从未使用过。快速谷歌搜索出现this ,而且我确信如果您不想花时间自己编写解析器,还有很多其他选择。

关于android - 以 png 和 jpg 格式存储信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864632/

相关文章:

android - session Cookie 在移动设备上的过期时间比在桌面设备上快得多

android - 直接访问android通知?

html - 图像尺寸与 Canvas 尺寸不匹配

android - 如何通过 Android 将 png 文件转换为 xml 资源?

php - SQL Server 2008 R2 - 检索过程输入/输出参数

video - ffmpeg 在视频编码时忽略 -metadata 选项

java - Android Java 日历替代品,具有以下功能

image - 如何为 10 亿张 png 图像生成统一缩略图?

c - 如何将元数据添加到 Visual Studio C/C++ 项目

java - android sqlite数据库表重建