我想知道是否有一种明显而优雅的方式可以为jpeg添加额外的数据,同时保持标准图像查看器的可读性。更准确地说,我想将(扫描的)照片背面的图片嵌入其中。旧照片通常会在背面写上个人信息,可能是日期或某些注释。当然你可以使用EXIF并添加一些文字,但更好的是背面的精确图像。 当然我也可以保存2个文件xyz.jpg和xyz_back.jpg,或者将两个图像并排排列,在一张图片中始终可见,但这不是我想要的。 有可能并且已经完成,例如在三星Note 2和3上,您可以为您拍摄的照片添加手写笔记。或者某些智能手机允许将录音内容嵌入到图像文件中,同时保留其他设备上这些文件的可读性。
答案 0 :(得分:2)
一个有趣的问题。有些文件格式支持每个文件多个图像(多重TIFF可以想到)但JPEG本身并不支持这种格式。
JPEG文件格式的一个特征是APP段的概念。这些是JPEG文件的区域,可以包含任意信息(作为字节序列)。 Exif实际上存储在其中一个段中,并由前导码识别。
请看这个页面:http://www.sno.phy.queensu.ca/~phil/exiftool/#JPEG
您会看到许多以APP
开头的细分,例如APP0
(可以存储JFIF数据),APP1
(可以包含Exif)等等。
没有什么可以阻止您在其中一个段中存储数据。符合要求的JPEG阅读器将忽略这些无法识别的数据,但您可以编写软件来存储/检索其中的数据。甚至可以在这样的片段中嵌入另一个JPEG文件!然而,我知道这样做没有先例。
另一个选择是将第二个图像包含为第一个图像的缩略图。通常缩略图非常小,但您可以将第二个图像存储为第一个图像的缩略图。有些软件可能会替换或删除它。
一般来说,我认为使用两个文件和一个命名约定将是最简单和最不容易混淆的,但你确实有选择。
答案 1 :(得分:2)
有两种方法可以做到这一点。
1)使用和应用标记(APP0-APPF) - 首选方法
2)使用评论标记(COM)
如果您使用APPn标记:
1)不要将其作为文件中的第一个APPn。每种已知的JPEG文件格式都需要在SOI标记之后的某种格式特定的APPn标记。确保你的标记不存在。
2)在数据的开头放置一个唯一的应用程序标识符(以null结尾的字符串)(按惯例完成)。
所有类型的应用程序都以这种方式存储其他数据。
一个问题是长度字段仅为16位(Big Endian格式)。如果您有大量数据,则必须将其拆分为多个标记。
如果使用COM标记,请确保它位于文件中的第一个APPn标记之后。但是,我不鼓励使用COM标记,因为它可能会阻止尝试显示内容的应用程序。