<?php
#########################################################
# #
# Release....: ImageVue.v1.4.PHP.NULL-WDYL #
# Date.......: 01/30/04 #
# Released...: WDYL #
# Protection.: CallHome, License Check, Refferer Links #
# #
#########################################################
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] : '');
}
?>
(非常全面的一个php技术网站, 有相当丰富的文章和源代码.)
|