2015-01-29 1 views
0

기본적으로 내 질문은 this one과 같지만 JPEG가 아닌 PNG입니다.스트림에서 PNG 이미지의 길이를 감지하십시오.

더 구체적으로 말하면, 함께 연결된 PNG 이미지가 많으며 길이를 찾고 싶기 때문에 개별 이미지에 해당하는 조각으로 스트림을 분할 할 수 있습니다.

이미지를 디코딩하거나 유효성을 검사 할 필요가 없습니다. 입력 스트림은 유효한 PNG 이미지로 구성되어 있으며이를 확인하고 싶지 않습니다. 대신 가능한 한 빨리이 작업을 수행하는 것이 유용하므로 디코딩 작업이 적게 될수록 좋습니다. , splitpng.pl을 말하고이 100 % 고장이없는 perl splitpng.pl < myfile

을 실행으로 여기

+1

PNG 파일에 유효한 sig 및 end-of-file 덩어리가 있기 때문에 * way *는 JPEG보다 쉽습니다. IEND가 발생할 때까지 청크 크기를 더하면 완료됩니다. [specifications] (http://www.w3.org/TR/PNG/#5DataRep)를 참조하십시오. – usr2564301

답변

1

당신이 this answer

#!/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); 
} 

저장을 기반으로, 펄 스크립트가이합니다 (rigourous 방법은 덩어리의 크기를 계산하는 것 , Jongware의 의견에 따르면), PNG 안에서 그 서명을 가질 확률은 작아야한다.

관련 문제