【问题标题】:Can I safely append null bytes to a PNG image我可以安全地将空字节附加到 PNG 图像吗
【发布时间】:2015-01-23 23:14:15
【问题描述】:

我想将空字节附加到 PNG 文件以匹配之前的大小。我已经成功地将 10 MB 添加到一个小图像中,查看图像没有问题。我想知道这是否基于 PNG 格式的定义是安全的,或者我是否只是因为软件中的良好纠错而幸运。

更新:我已经删除了为什么要这样做。

【问题讨论】:

  • 这似乎是一个通过 SVN 解决的问题,而不是填充二进制文件?例如:stackoverflow.com/questions/9767481/…stackoverflow.com/questions/2277258/…,也许?
  • Subversion 不查看文件大小,如果时间戳已更改,它会执行校验和。因此,无论您附加 1 个字节还是 10MB,它都会检测到更改。
  • 大多数 PNG 查看器可能会允许这样做,因为有一个明确的文件结束标记,尽管技术上“[n]o 块或其他内容跟随 IEND 块。” (w3.org/TR/PNG/#15FileConformance,项目符号 c)。
  • 谢谢。 @Jongware。我认为这个网站有一个严重的问题,用户试图关闭帖子,总是假设我没有做任何研究并看到有问题的线程,也许是想以此获得一些声誉。
  • 但是你没有提到你已经做了一些研究:)“..查看图像没有问题”真的取决于你尝试使用的软件。即,strict 查看器可能会根据规范拒绝图像。但我猜近距离投票是因为你爱上了X-Y Problem

标签: image png image-size


【解决方案1】:

附加 NULL 是否安全取决于解码应用程序和库。如果您想绝对安全,请插入一个包含 NULL 的私有块。请注意,此方法将始终向文件添加至少 12 个字节(4 字节长度、4 字节块名称、零个或多个 NULL 字节和 4 字节 CRC),格式为

nnnnzpAD000000CRCN

在哪里

nnnn = number of NULLs
zpAD = chunk name
0000000...  the NULLs
CRCN = 4-byte CRC calculated over the chunk name and the NULLs

把这个新的“zpAD”块(或任何你决定叫它的名字)放在现有的 IEND 块之前。

【讨论】:

  • 谢谢 - 所以这个“私人”夹头会像一个没有人引用的文件,因为这个“zpAD”索引?
  • 对。由于它尚未发布,因此没有人知道它的真正含义(有人可能会尝试对其进行逆向工程并弄清楚)。私有名称只能由大写和小写字母组成,并且应该像我演示的那样:lower、lower、upper、upper。有关这些特定情况的详细信息,请参阅 PNG 规范。唯一的危险是您将与其他人的私有块发生名称冲突,该块具有相同的名称但内容不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
相关资源
最近更新 更多