【问题标题】:Is it possible to include extra information in an image file that won't corrupt it?是否可以在不会损坏它的图像文件中包含额外信息?
【发布时间】:2020-11-24 17:00:47
【问题描述】:

我正在制作一个 Java 程序,我希望能够将额外信息添加到图像文件(只是纯文本,以后可以由同一程序读取)。我正在考虑将它添加到第一行。

有没有办法在不损坏图像文件的情况下添加这样的信息。我能否以某种方式“评论”该文本,使其不会作为图像二进制文件的一部分被读取(例如,当您在记事本中打开图像时,它会显示在那里)。

【问题讨论】:

    标签: java image


    【解决方案1】:

    这是标记为Java,但一般情况下,您可以修改图像文件的EXIF data

    另见:http://frickelblog.wordpress.com/2009/08/21/java-library-for-reading-writing-exif-xmp-and-iptc-in-jpegs/

    【讨论】:

    • 非常感谢,这正是我想要的!
    【解决方案2】:

    大多数图像文件格式允许任意元数据。 PNG 图像在“块”中包含像素数据、颜色配置文件、版权等 - 请参阅 http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html 以获取说明。您可能想要一个 iTXt 或 tEXT 块。

    JPEG 还允许元数据。阅读 JFIF 和 EXIF。看到这个答案:https://stackoverflow.com/a/10699613/10468

    请参阅问题 Writing image metadata in Java, preferably PNG 以获得一些 Java 特定的答案。

    Find JPEG resolution with PHP 中可能还有对您有用的信息,尽管该问题询问的是 PHP 而不是 Java。

    TIFF 现在已经很少见了,但这种格式允许为您想要存储的任何数据提供各种额外数据和用户定义的标签。

    据我所知,没有图像文件格式可以在文本编辑器中打开或在命令行打印,这将显示为文本元数据,而不是像素乱码。但是,可以定义这样的文件格式 - 如果文件以文本开始,具有 EOT (ascii 03) (iirc),然后以二进制形式继续,大多数文本命令行工具和可能的文本编辑器都可以很好地处理文本并停在 EOT。我不确定这是否适用于所有平台。

    【讨论】:

      【解决方案3】:

      您可以使用 Image Stagenography 隐藏文本。以下是一些可以帮助您执行此操作的链接:Images' Steganography

      Steganography - Hiding messages in the Noise of a Picture

      【讨论】:

        【解决方案4】:

        是的,这是可能的。我解释一下算法:

        1. 您需要制作一个掩码以使图像的最低有效位的最后一位为零。先做一点,看看对你的形象的影响。然后将最后两位更改为零,看看您的图像是如何受到影响的。继续计算,您可以在不影响图像质量的情况下将多少位归零。
        2. 获取短信的二进制内容。
        3. 计算文本消息二进制内容的长度。您需要这个来将此值保存在图像的前几个字节中。稍后您将使用它来了解需要读取多少像素才能检索您的消息。

        这里是主要部分:

        1. 假设您只将图像的最后一位设为零,并保留前 16 位作为消息长度,那么您需要保留前 16 个像素来保存消息长度。将消息长度的二进制值(例如 bin(114))保存在前 16 个像素的最后一位中。您可能需要向右填充零以使其匹配。
        2. 从像素 17 开始,在每个像素的最后一位开始一点一点地保存您的消息。
        3. 要检索嵌入的消息,请读取前 16 个像素,构造长度以了解您需要读取多少像素来重构您的消息。

        您甚至可以在图像中保存另一个图像或语音信号。我知道这篇文章被标记为 Java,但为了让您了解,您可以在文件“stagenography_embed_text_in_image.py”中查看我在 this_github_link 中实现相同功能的 python 代码。我还解释了在这个stackoverflow_post中保存其他类型信息的算法。

        希望它说清楚。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-25
          • 2018-09-12
          • 2012-01-16
          • 2012-04-13
          • 1970-01-01
          • 1970-01-01
          • 2011-02-02
          • 1970-01-01
          相关资源
          最近更新 更多