phpbar.de logo

Mailinglisten-Archive

[php] Erkennung von progressiv kodierten JPEG Bildern

[php] Erkennung von progressiv kodierten JPEG Bildern

Andreas Müller php at universalware.de
Don Jan 10 11:21:47 CET 2008


Hallo Florian,

nun da du so lieb drum bittest:

function jpeg_getcompression($path) {
	$sof=-1;
	$f=fopen($path,'rb');		
	while (!feof($f)) {		
		$c1=ord(fread($f,1));
		if ($c1==0xff) {			
			$c2=ord(fread($f,1));	
			if ($c2==0xd8) { // Start Of Image
				//do nothing
			} else
			if ($c2==0xd9) { // End of Image
				break; //end
			} else
			if ((($c2>=0xc0) && ($c2<=0xc3)) || 
			    (($c2>=0xc5) && ($c2<=0xc7)) ||
			    (($c2>=0xc9) && ($c2<=0xcb)) || 
			    (($c2>=0xcd) && ($c2<=0xcf))) { // Start of
Frame Marker
				$sof=$c2-0xc0;
				break; //we can stop now
			} else
			if ($c2==0xda) { // Start of Scan
				$end=false;
				$c4=$c2;				
				while (!feof($f)) {
					$c3=$c4;
					$c4=ord(fread($f,1));

					if (($c3==0xff) && ($c4!=0x00)) {
						$end=true;
						break;
					} 
				}					
				if ($end) {
					fseek($f,-2,SEEK_CUR);

				}
			} else { // any other segment
				$c3=ord(fread($f,1));
				$c4=ord(fread($f,1));

				$length=($c3*256+$c4)-2;
				fseek($f,$length,SEEK_CUR);
			}
		} else { // 0xff expected - data error
			break;
		}
	}			
	fclose($f);		
	return $sof;
} 

Return Code:
-1 - Fehler
 0 - Baseline DCT
 1 - Extended sequential DCT
 2 - Progressive DCT
 3 - Lossless (sequential)
 5 - Differential sequential DCT
 6 - Differential progressive DCT
 7 - Differential lossless (sequential)
 9 - Extended sequential DCT
10 - Progressive DCT
11 - Lossless (sequential)
13 - Differential sequential DCT
14 - Differential progressive DCT
15 - Differential lossless (sequential)

LG,
Andreas



php::bar PHP Wiki   -   Listenarchive