Filter:   InfoImg
download getid3.getimagesize.php
Language: PHP
LOC: 107
Project Info
Tunez
Server: SourceForge
Type: cvs
...tunez\tunez\tunez\html\id3\
   getid3.aac.php
   getid3.ape.php
   getid3.asf.php
   getid3.au.php
   getid3.avr.php
   getid3.bmp.php
   getid3.bonk.php
   getid3.check.php
   getid3.exe.php
   getid3.flac.php
   getid3.frames.php
   getid3.functions.php
   getid3.getimagesize.php
   getid3.gif.php
   getid3.id3v1.php
   getid3.id3v2.php
   getid3.iso.php
   getid3.jpg.php
   getid3.la.php
   getid3.lookup.php
   getid3.lpac.php
   getid3.lyrics3.php
   getid3.matroska.php
   getid3.midi.php
   getid3.mod.php
   getid3.monkey.php
   getid3.mp3.php
   getid3.mpc.php
   getid3.mpeg.php
   getid3.nsv.php
   getid3.ogg.php
   getid3.ogginfo.php
   getid3.optimfrog.php
   getid3.php
   getid3.png.php
   getid3.putid3.php
   getid3.quicktime.php
   getid3.rar.php
   getid3.real.php
   getid3.rgad.php
   getid3.riff.php
   getid3.shorten.php
   getid3.swf.php
   getid3.thumbnail.php
   getid3.voc.php
   getid3.vqf.php
   getid3.write.php
   getid3.zip.php

<?php
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at http://getid3.sourceforge.net                ///
//            or http://www.getid3.org                        ///
/////////////////////////////////////////////////////////////////
//                                                             //
// getid3.getimagesize.php - part of getID3()                  //
// See getid3.readme.txt for more details                      //
//                                                             //
/////////////////////////////////////////////////////////////////
// GetURLImageSize( $urlpic ) determines the                   //
// dimensions of local/remote URL pictures.                    //
// returns array with ($width, $height, $type)                 //
//                                                             //
// Thanks to: Oyvind Hallsteinsen aka Gosub / ELq -            //
// gosub@elq.org  for the original size determining code       //
//                                                             //
// PHP Hack by Filipe Laborde-Basto Oct 21/2000                //
// FREELY DISTRIBUTABLE -- use at your sole discretion! :)     //
// Enjoy. (Not to be sold in commercial packages though,       //
// keep it free!) Feel free to contact me at fil@rezox.com     //
// (http://www.rezox.com)                                      //
//                                                             //
// Modified by James Heinrich <getid3@users.sourceforge.net>   //
// June 1, 2001 - created GetDataImageSize($imgData) by        //
// seperating the fopen() stuff to GetURLImageSize($urlpic)    //
// which then calls GetDataImageSize($imgData). The idea being //
// you can call GetDataImageSize($imgData) with image data     //
// from a database etc.                                        //
//                                                             //
/////////////////////////////////////////////////////////////////

define('GIF_SIG',     chr(0x47).chr(0x49).chr(0x46));  // 'GIF'

define('PNG_SIG',     chr(0x89).chr(0x50).chr(0x4E).chr(0x47).chr(0x0D).chr(0x0A).chr(0x1A).chr(0x0A));

define('JPG_SIG',     chr(0xFF).chr(0xD8).chr(0xFF));
define('JPG_SOS',     chr(0xDA)); // Start Of Scan - image data start
define('JPG_SOF0',    chr(0xC0)); // Start Of Frame N
define('JPG_SOF1',    chr(0xC1)); // N indicates which compression process
define('JPG_SOF2',    chr(0xC2)); // Only SOF0-SOF2 are now in common use
define('JPG_SOF3',    chr(0xC3));
// NB: codes C4 and CC are *not* SOF markers
define('JPG_SOF5',    chr(0xC5));
define('JPG_SOF6',    chr(0xC6));
define('JPG_SOF7',    chr(0xC7));
define('JPG_SOF9',    chr(0xC9));
define('JPG_SOF10',   chr(0xCA));
define('JPG_SOF11',   chr(0xCB));
// NB: codes C4 and CC are *not* SOF markers
define('JPG_SOF13',   chr(0xCD));
define('JPG_SOF14',   chr(0xCE));
define('JPG_SOF15',   chr(0xCF));
define('JPG_EOI',     chr(0xD9)); // End Of Image (end of datastream)


function GetURLImageSize($urlpic) {
	if ($fd = @fopen($urlpic, 'rb')){
		$imgData = fread($fd, filesize($urlpic));
		fclose($fd);
		return GetDataImageSize($imgData);
	} else {
		return array('', '', '');
	}
}


function GetDataImageSize($imgData) {
	$height = '';
	$width  = '';
	$type   = '';
	if ((substr($imgData, 0, 3) == GIF_SIG) && (strlen($imgData) > 10)) {
		$dim = unpack('v2dim', substr($imgData, 6, 4));
		$width  = $dim['dim1'];
		$height = $dim['dim2'];
		$type = 1;
	} elseif ((substr($imgData, 0, 8) == PNG_SIG) && (strlen($imgData) > 24)) {
		$dim = unpack('N2dim', substr($imgData, 16, 8));
		$width  = $dim['dim1'];
		$height = $dim['dim2'];
		$type = 3;
	} elseif ((substr($imgData, 0, 3) == JPG_SIG) && (strlen($imgData) > 4)) {
		///////////////// JPG CHUNK SCAN ////////////////////
		$imgPos = 2;
		$type = 2;
		$buffer = strlen($imgData) - 2;
		while ($imgPos < strlen($imgData)) {
			// synchronize to the marker 0xFF
			$imgPos = strpos($imgData, 0xFF, $imgPos) + 1;
			$marker = $imgData[$imgPos];
			do {
				$marker = ord($imgData[$imgPos++]);
			} while ($marker == 255);
			// find dimensions of block
			switch (chr($marker)) {
				// Grab width/height from SOF segment (these are acceptable chunk types)
				case JPG_SOF0:
				case JPG_SOF1:
				case JPG_SOF2:
				case JPG_SOF3:
				case JPG_SOF5:
				case JPG_SOF6:
				case JPG_SOF7:
				case JPG_SOF9:
				case JPG_SOF10:
				case JPG_SOF11:
				case JPG_SOF13:
				case JPG_SOF14:
				case JPG_SOF15:
					$dim = unpack('n2dim', substr($imgData, $imgPos + 3, 4));
					$height = $dim['dim1'];
					$width  = $dim['dim2'];
					break 2; // found it so exit
				case JPG_EOI:
				case JPG_SOS:
					return false;       // End loop in case we find one of these markers
				default:            // We're not interested in other markers
					$skiplen = (ord($imgData[$imgPos++]) << 8) + ord($imgData[$imgPos++]) - 2;
					// if the skip is more than what we've read in, read more
					$buffer -= $skiplen;
					if ($buffer < 512) { // if the buffer of data is too low, read more file.
						// $imgData .= fread( $fd,$skiplen+1024 );
						// $buffer += $skiplen + 1024;
						return false; // End loop in case we find run out of data
					}
					$imgPos += $skiplen;
					break;
			} // endswitch check marker type
		} // endif loop through JPG chunks
	} // endif chk for valid file types

	return array($width, $height, $type);
} // end function


function ImageTypesLookup($imagetypeid) {
	static $ImageTypesLookup = array();
	if (empty($ImageTypesLookup)) {
		$ImageTypesLookup[1]  = 'gif';
		$ImageTypesLookup[2]  = 'jpg';
		$ImageTypesLookup[3]  = 'png';
		$ImageTypesLookup[4]  = 'swf';
		$ImageTypesLookup[5]  = 'psd';
		$ImageTypesLookup[6]  = 'bmp';
		$ImageTypesLookup[7]  = 'tiff (little-endian)';
		$ImageTypesLookup[8]  = 'tiff (big-endian)';
		$ImageTypesLookup[9]  = 'jpc';
		$ImageTypesLookup[10] = 'jp2';
		$ImageTypesLookup[11] = 'jpx';
		$ImageTypesLookup[12] = 'jb2';
		$ImageTypesLookup[13] = 'swc';
		$ImageTypesLookup[14] = 'iff';
	}
	return (isset($ImageTypesLookup[$imagetypeid]) ? $ImageTypesLookup[$imagetypeid] : '');
}

?>