文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>得到图片的长、宽及类型。

得到图片的长、宽及类型。

时间:2007-02-18  来源:PHP爱好者

CODE:
[复制到剪切板]
<?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爱好者站 http://www.phpfans.net 文章|教程|下载|源码|论坛.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载