Jpeg 向jpg图像文件添加大量自定义数据

Jpeg 向jpg图像文件添加大量自定义数据,jpeg,exif,file-format,Jpeg,Exif,File Format,我想知道是否有一种明显而优雅的方法可以向jpeg中添加额外的数据,同时保持标准图像查看器的可读性。更确切地说,我想嵌入一个图片的背面(扫描)照片到它。旧照片的背面通常写有个人信息,可能是日期或一些注释。当然,您可以使用EXIF并添加一些文本,但背面的实际图像更可取。 当然,我也可以保存两个文件xyz.jpg和xyz_back.jpg,或者将两个图像并排排列,始终在一张图片中可见,但这不是我想要的。 这是可能的,而且已经完成了,就像在三星Note2和3上一样,你可以将手写的笔记添加到你拍摄的照片中

我想知道是否有一种明显而优雅的方法可以向jpeg中添加额外的数据,同时保持标准图像查看器的可读性。更确切地说,我想嵌入一个图片的背面(扫描)照片到它。旧照片的背面通常写有个人信息,可能是日期或一些注释。当然,您可以使用EXIF并添加一些文本,但背面的实际图像更可取。 当然,我也可以保存两个文件xyz.jpg和xyz_back.jpg,或者将两个图像并排排列,始终在一张图片中可见,但这不是我想要的。
这是可能的,而且已经完成了,就像在三星Note2和3上一样,你可以将手写的笔记添加到你拍摄的照片中作为图像。或者一些智能手机允许在图像文件中嵌入语音记录,同时在其他设备上保留这些文件的可读性。

一个有趣的问题。有一些文件格式支持每个文件有多个图像(我想到的是多页TIFF),但JPEG本机不支持这种格式

JPEG文件格式的一个特点是应用程序段的概念。这些是JPEG文件的区域,可以包含任意信息(作为字节序列)。Exif实际上存储在其中一个段中,并由前导码标识

请看这一页:

您将看到许多以
APP
开头的片段,例如
APP0
(可以存储JFIF数据)、
APP1
(可以包含Exif)等等

没有什么能阻止您将数据存储在其中一个段中。一致的JPEG阅读器将忽略这些无法识别的数据,但您可以编写软件来存储/检索其中的数据。甚至可以在这样的片段中嵌入另一个JPEG文件!然而,我知道没有这样做的先例

另一个选择是将第二个图像作为第一个图像的缩略图。通常缩略图非常小,但您可以将第二个图像存储为第一个图像的缩略图。不过,某些软件可能会替换或删除此功能


一般来说,我认为使用两个文件和一个命名约定是最简单和最容易混淆的,但您确实有选择。

有两种方法可以做到这一点

1) 使用和应用标记(APP0–APPF)-首选方法

2) 使用注释标记(COM)

如果使用APPn标记:

1) 不要将其作为文件中的第一个APPn。每个已知的JPEG文件格式在SOI标记之后都需要某种特定于格式的APPn标记。确保你的记号笔不在那里

2) 将唯一的应用程序标识符(以null结尾的字符串)放在数据的开头(由约定完成)

所有类型的应用程序都以这种方式存储附加数据

一个问题是长度字段只有16位(大端格式)。如果有大量数据,则必须将其拆分为多个标记


如果使用COM标记,请确保它位于文件中第一个APPn标记之后。但是,我不鼓励使用COM标记进行类似的操作,因为它可能会阻塞尝试显示内容的应用程序。

re“没有先例”——像E6这样的FLIR相机已经使用了一段时间。E6有两个传感器,一个普通摄像头,一个红外摄像头,它们同时触发两个传感器并发出一个JPG。在这个JPG中,默认情况下你有红外图像,但是从额外的JPG部分你可以提取场景的普通数码照片,一些黑白模板之类的东西,还有更多有趣的东西。谷歌有一个摄像头应用程序,它以类似的方式包含了一幅深度地图图像。它存储在XMP中: