×

实例分析PNG的故障原因

消耗积分:2 | 格式:rar | 大小:0.9 MB | 2017-09-30

分享资料个

  PNG是一种图像格式,始于1995年,作为一种颇受欢迎的图像格式,PNG至今仍十分盛行。一般而言,PNG以无损失压缩或处理透明像素的能力为人所知。然而,我并不想从泛泛的角度去看待不同的图像格式,而是尝着用不同的方式让它们发生故障,你有没有想过,PNG发生故障时是什么效果呢?

  校验和(Checksum)

  让我们首先来看看校验和(Checksum)系统中的CRC32算法。这一算法通常用于确认受损图像,当它侦测到图像文件受损时,不会在一般的图片阅读器上显现出来。因此,若想使PNG发生故障,用诸如文本编辑器或二进制编辑器重写部分二进制数据的简单方法是行不通的。换句话说,“黑掉”PNG之难,难于上青天。

  因此,为了能顺利“黑掉”PNG,我们需要根据PNG的格式规范(PNG Specification)来做。这意味着,解码CRC32算法后要对数据进行重写和重新计算,并将其绑定到已经编辑的数据上。

  状态(State)

  接下来,我们看看PNG的转码过程。表1简要地显示了PNG编码流工作流程。包括四步:原始数据、过滤后数据、压缩后数据、格式化的PNG。

  实例分析PNG的故障原因

  表1 PNG编码流

  理论上来说,上述四个步骤都可以成为“下手”的目标。然而,从“原始数据”下手跟从BMP下手一样,技术上而言,并不能把它称之为“PNG故障”。而以最后一步“格式化的PNG”为目标也行不通,原因在于上文提到的校验和系统的工作原理,因此无法产生故障。

  现在,能供我们下手的就只有“过滤后数据”或“压缩后数据”两个步骤,只要方法正确,就可以使PNG故障形成。当我攻击“过滤后数据”时,产生的效果非常明显,故障元素好像花瓣一样弥漫了整张图像,过滤器之间的差异在“过滤后数据”受到攻击时变得尤为明显。另一方面,“压缩后数据”故障受到了它们自身的压缩算法的影响(Deflate压缩),因此显示出了一种与雪花噪点类似的图片效果。

  当然,在转码过程之外,也有其他的过程能影响PNG故障的图案,例如透明像素和interlace。

  五重过滤(Five filters)

  决定PNG故障图案最重要的决定因素是过滤的过程,这一过程通过某种算法将每一层扫描线的为压缩像素数据进行转换,从而提升压缩效率。过滤包括四种算法和五种过滤类型,分别为Sub、Up、Average、Paeth和None(None为无过滤)。PNG图像通常在使用最适当的过滤类型对每一层扫描线进行过滤后才开始压缩,因此,在PNG图像生成之后,五种压缩会合为一体。

  这五种过滤通常只是促进压缩效率的提升,因此无论使用哪一层过滤,输出结果都一样。然而,当过滤后的数据受到损坏后,输出结果会显示出明显的差异。当一个图像经过优化,并同时具备上述五种过滤效果后,就很难辨别出不同的过滤效果。然而当同一个单一的过滤应用在每一条扫描线上,图像出现故障时,差异就很明显了。

  下面我会展示每一种过滤的效果差异,当我们仔细留意不同的效果时,会发觉哪一种过滤会让PNG故障的部分产生哪种美丽的效果。是的,这些图像的确很美丽。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !