从流中检测PNG图像的长度

时间:2015-01-29 00:59:57

标签: png

基本上我的问题就像this one,但是来自PNG而不是JPEG。

更具体地说,我将一堆PNG图像连接在一起,我想发现它们的长度,因此我可以将流分割成与单个图像相对应的部分。

我不需要解码或验证图像。我可以假设输入流由有效的PNG图像组成,并且不想验证它。相反,对我来说,尽可能快地完成此操作非常有用,因此需要的解码操作量越少越好。

1 个答案:

答案 0 :(得分:1)

这里有一个基于this answer

的perl脚本
#!/usr/bin/perl
undef $/;
$_ = <>;
$n = 0;

for $match (split(/(?=\x{89}PNG\x{0d}\x{0a}\x{1a}\x{0a})/)) {
      open(O, sprintf('>temp%04d.png',++$n));
      print O $match;
      close(O);
}

另存为,说splitpng.pl并运行perl splitpng.pl < myfile

这不是100%万无一失(根据Jongware的评论,严格计算块大小),但在PNG内部签名的概率应该很小。