如何获取图片的大小和类型?

在缩略图中,不知道大小无法确定比例

不知道类型,无法确定要调用的函数,如p_w_picpathcreatefrompng()等。。

要处理的图片可能是各种大小,各种类型都有,如何获取大小和类型

使用函数getp_w_picpathsize()

getp_w_picpathsize 取得图像大小

array getp_w_picpathsize ( string $filename [,array &$p_w_picpathinfo ] )

string p_w_picpath_type_to_mime_type ( int$p_w_picpathtype )

判断一个 IMAGETYPE常量的 MIME 类型。

<?php

$arr = getp_w_picpathsize("./2.jpg");

print_r($arr);

echo p_w_picpath_type_to_mime_type($arr[2]);

/*

Array

(

    [0] => 720 //

    [1] => 1280 //

    [2] => 2 // 图片类型

    [3] => width="720" height="1280"

    [bits] => 8

    [channels] => 3

    [mime] => p_w_picpath/jpeg

)

类型标号:

1 = GIF2 = JPG3 = PNG4 = SWF

5 = PSD6 = BMP7 = TIFF(intel byte order)

8 = TIFF(motorola byte order)9 = JPC10 = JP2

11 = JPX12 = JB213 = SWC14 = IFF15 = WBMP16 = XBM

*/

?>

缩略图类:

<?php

/*

想操作图片,先要获得图片的大小,类型信息

水印就是把指定的水印复制到目标上,并加透明效果

缩略图就是把大图复制到小尺寸的图片上*/

class ImageTool{

     //p_w_picpathInfo()  分析图片的信息

     //return  array()

     public  static function p_w_picpathInfo($p_w_picpath){

          if(!file_exists($p_w_picpath)){

                return  false;

          }

          $info  = getp_w_picpathsize($p_w_picpath);

          if  ($info == false) {

                return  false;

          }

          //分析info数组

          $img['width']  = $info[0];

          $img['height']  = $info[1];

          /*int  strpos ( string 被查找的字符串 , mixed 查找的内容 [, int 开始位置 = 0 ] )*/

          $img['ext']  =  substr($info['mime'], strpos( $info['mime']  ,'/')+1 );

          return  $img;

     }

     /*加水印功能*

     param  string $dst 待操作图片

     param  string $water 水印小图

     param  string $save ,不填默认替换原始图

     param  int $alpha 透明度

     param  int $position 水印位置左上开始顺时针 0123,默认2

     */

     public  static function water($dst,$water,$save=null ,$position =2,$alpha =50){

          //首先需要保证两个图片都得存在

          if  (!file_exists($dst) || !file_exists($water)) {

                return  false;

          }

          //需要保证水印不能比待操作图片还要大

          $dinfo  = self::p_w_picpathInfo($dst);

          $winfo  = self::p_w_picpathInfo($water);

          if  ($winfo['height']>$dinfo['height'] || $winfo['width']>$dinfo['width'])  {

                return  false;

          }

          //把两张图都读到画布上,如何来读图片

          //动态加载函数名

          $dfunc  = 'p_w_picpathcreatefrom'.$dinfo['ext'];

          $wfunc  = 'p_w_picpathcreatefrom'.$winfo['ext'];

          if  (!function_exists($dfunc) || !function_exists($wfunc)) {

                return  false;

           }

          //动态加载函数,创建画布

          $dim  = $dfunc($dst);//创建待操作的画布

          $wim  = $wfunc($water);//创建水印画布

          //根据水印的位置,计算粘贴的坐标

          switch  ($position) {

                case  0: $pos[x]=0;

                           $pos[y]=0;  break; // 左上角

                case  1: $pos[x]=$dinfo['width']-$winfo['width'];

                           $pos[y]=0;  break; //右上角

                case  2: $pos[x]=$dinfo['width']-$winfo['width'];

                           $pos[y]=$dinfo['height']-$winfo['height'];  break; // 右下角

                case  3: $pos[x]=0;

                           $pos[y]=$dinfo['height']-$winfo['height'];  break; // 左下角

          }

          //加水印

          p_w_picpathcopymerge($dim,$wim,  $pos[x], $pos[y], 0, 0, $winfo['width'], $winfo['height'], $alpha);

          //保存

          if  (!$save) {

                $save  = $dst;

                unlink($dst);//删掉原图

          }

          $createfunc  = 'p_w_picpath'.$dinfo['ext'];

          $createfunc($dim,$save);

          p_w_picpathdestroy($dim);

          p_w_picpathdestroy($wim);

          return  true;

     }

     /*生成缩略图

等比例缩放,两边留白

     */

     public  static function thumb($dst,$save=null,$width = 200,$height = 200){

          //判断待处理的图片是否存在

          if(!file_exists($dst)){

                return  false;

          }

          //获取图片信息

          $dinfo  = self::p_w_picpathInfo($dst);

          if  ($dinfo == false) {

                return  fasle;

          }

          //计算缩放比例

          //按宽高各计算缩放比

          //取小的值

          $calc  = min($width/$dinfo['width'],$height/$dinfo['height']);

          echo  $calc;

          /*创建原始图画布*/

          $dfunc  = 'p_w_picpathcreatefrom'.$dinfo['ext'];

          $dim  = $dfunc($dst);

          /*创建缩略画布*/

          $tim  = p_w_picpathcreatetruecolor($width, $height);

          /*创建白色填充缩略画布*/

          $white  = p_w_picpathcolorallocate($tim, 255, 255, 255);

          p_w_picpathfill($tim,  0, 0, $white);

          /*复制并缩略*/

          ///p_w_picpathcopyresampled(dst_p_w_picpath,  src_p_w_picpath, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)

          $dwidth  = (int)($dinfo['width']*$calc);

          $dheight  = (int)($dinfo['height']*$calc);

          $padingx  = (int)(($width-$dwidth)/2);

          $padingy  = (int)(($height-$dheight)/2);

          echo  $dwidth,$dheight,$padingx,$padingy;

          p_w_picpathcopyresampled($tim,  $dim, $padingx, $padingy, 0, 0, $dwidth,$dheight,  $dinfo['width'], $dinfo['height']);

          /*生成缩略图*/

          if  (!$save) {

                $save  = $dst;

                unlink($dst);

          }

          $createfunc  = 'p_w_picpath'.$dinfo['ext'];

          $createfunc($tim,$save);

          /*销毁图片*/

          p_w_picpathdestroy($dim);

          p_w_picpathdestroy($tim);

          return  true;

     }

}

//print_r(ImageTool::p_w_picpathInfo('./2.jpg'));

/*Array ( [width] => 720 [height]  => 1280 [ext] => jpeg ) */

/*echo  ImageTool::water('2.jpg','1.png','new0.jpg',0)?ok:fail;

echo  ImageTool::water('2.jpg','1.png','new1.jpg',1)?ok:fail;

echo  ImageTool::water('2.jpg','1.png','new2.jpg',2)?ok:fail;

echo  ImageTool::water('2.jpg','1.png','new3.jpg',3)?ok:fail;*/

/*echo ImageTool::thumb('1.png',  'thumb1.jpg')?ok:fail;

echo ImageTool::thumb('1.png',  'thumb2.jpg',100,100)?ok:fail;

echo ImageTool::thumb('2.jpg',  'thumb3.jpg')?ok:fail;

echo ImageTool::thumb('2.jpg',  'thumb4.jpg',100,100)?ok:fail;*/

?>