好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php高效快速获取图片尺寸的方法

在 php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸的效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧.

方法可以用于快速获取图片尺寸信息,获取JPEG格式图片的尺寸信息,并且不需要下载读取整个图片,经测试这个函数不是对所有JPEG格式的图片都有效.

1.获取JPEG格式图片的尺寸信息,代码如下:

<?php  /*     * http://www.phpfensi.com     */     // Retrieve JPEG width and height without downloading/reading entire image.     function  getjpegsize( $img_loc ) {       $handle  =  fopen ( $img_loc ,  "rb" )  or   die ( "Invalid file stream." );       $new_block  = NULL;       if (! feof ( $handle )) {           $new_block  =  fread ( $handle , 32);           $i  = 0;           if ( $new_block [ $i ]== "xFF"  &&  $new_block [ $i +1]== "xD8"  &&  $new_block [ $i +2]== "xFF"  &&  $new_block [ $i +3]== "xE0" ) {               $i  += 4;               if ( $new_block [ $i +2]== "x4A"  &&  $new_block [ $i +3]== "x46"  &&  $new_block [ $i +4]== "x49"  &&  $new_block [ $i +5]== "x46"  &&  $new_block [ $i +6]== "x00" ) {                    // Read block size and skip ahead to begin cycling through blocks in search of SOF marker                      $block_size  = unpack( "H*" ,  $new_block [ $i ] .  $new_block [ $i +1]);                   $block_size  = hexdec( $block_size [1]);                   while (! feof ( $handle )) {                       $i  +=  $block_size ;                       $new_block  .=  fread ( $handle ,  $block_size );                       if ( $new_block [ $i ]== "xFF" ) {                            // New block detected, check for SOF marker                              $sof_marker  =  array ( "xC0" ,  "xC1" ,  "xC2" ,  "xC3" ,  "xC5" ,  "xC6" ,  "xC7" ,  "xC8" ,  "xC9" ,  "xCA" ,  "xCB" ,  "xCD" ,  "xCE" ,  "xCF" );                           if (in_array( $new_block [ $i +1],  $sof_marker )) {                                // SOF marker detected. Width and height information is contained in bytes 4-7 after this byte.                                  $size_data  =  $new_block [ $i +2] .  $new_block [ $i +3] .  $new_block [ $i +4] .  $new_block [ $i +5] .  $new_block [ $i +6] .  $new_block [ $i +7] .  $new_block [ $i +8];                               $unpacked  = unpack( "H*" ,  $size_data );                               $unpacked  =  $unpacked [1];                               $height  = hexdec( $unpacked [6] .  $unpacked [7] .  $unpacked [8] .  $unpacked [9]);                               $width  = hexdec( $unpacked [10] .  $unpacked [11] .  $unpacked [12] .  $unpacked [13]);                               return   array ( $width ,  $height );                          }  else  {                                // Skip block marker and read block size                                  $i  += 2;                               $block_size  = unpack( "H*" ,  $new_block [ $i ] .  $new_block [ $i +1]);                               $block_size  = hexdec( $block_size [1]);                          }                      }  else  {                           return  FALSE;                      }                  }              }          }      }       return  FALSE;  }  ?> 

2.实例代码如下:

$url = 'http://www.phpfensi.com/images/201203/08/1331189004_28093400.jpg' ;  $image_content  =  file_get_contents ( $url );  $image  = imagecreatefromstring( $image_content );  $width  = imagesx( $image );  $height  = imagesy( $image );  echo   $width . '*' . $height . "nr" ;  

查看更多关于php高效快速获取图片尺寸的方法的详细内容...

  阅读:56次

上一篇: 没有了

下一篇:php图片的二进制转换实例