【问题标题】:Adding big junks of custom data to jpg image file将大量自定义数据添加到 jpg 图像文件
【发布时间】:2016-02-10 02:15:32
【问题描述】:

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

【问题讨论】:

    标签: jpeg exif file-format


    【解决方案1】:

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

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

    看看这个页面:http://www.sno.phy.queensu.ca/~phil/exiftool/#JPEG

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

    没有什么能阻止您将数据存储在这些段之一中。符合标准的 JPEG 阅读器会忽略这些无法识别的数据,但您可以编写软件从那里存储/检索数据。甚至可以在这样的片段中嵌入另一个 JPEG 文件!但是,我知道这样做没有先例。

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

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

    【讨论】:

    • re “没有先例” - 像 E6 这样的 FLIR 相机已经有一段时间了。 E6 有 2 个传感器,一个普通摄像头,一个红外线,它们同时触发它们并发出一个 JPG。在该 JPG 中,默认情况下您具有红外图像,但从额外的 JPG 部分中,您可以提取场景的普通数码照片、一些类似黑白模板的东西等等。
    • 有趣。有一个谷歌相机应用程序以类似的方式包含深度图图像。它存储在 XMP 中:developers.google.com/depthmap-metadata
    【解决方案2】:

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

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

    2) 使用评论标记 (COM)

    如果您使用 APPn 标记:

    1) 不要让它成为文件中的第一个 APPn。每种已知的 JPEG 文件格式都需要在 SOI 标记之后出现某种格式特定的 APPn 标记。确保您的标记不存在。

    2) 在数据的开头放置一个唯一的应用程序标识符(以空字符结尾的字符串)(按照惯例)。

    各种应用程序都以这种方式存储附加数据。

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

    如果您使用 COM 标记,请确保它位于文件中的第一个 APPn 标记之后。但是,我不鼓励对这样的事情使用 COM 标记,因为它可能会阻塞尝试显示内容的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2014-05-31
      • 2012-10-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多