基本上我的问题就像this one,但是来自PNG而不是JPEG。
更具体地说,我将一堆PNG图像连接在一起,我想发现它们的长度,因此我可以将流分割成与单个图像相对应的部分。
我不需要解码或验证图像。我可以假设输入流由有效的PNG图像组成,并且不想验证它。相反,对我来说,尽可能快地完成此操作非常有用,因此需要的解码操作量越少越好。
答案 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内部签名的概率应该很小。