如何获取图片的大小和类型?
在缩略图中,不知道大小无法确定比例
不知道类型,无法确定要调用的函数,如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 = GIF,2 = JPG,3 = PNG,4 = SWF, 5 = PSD,6 = BMP,7 = TIFF(intel byte order), 8 = TIFF(motorola byte order),9 = JPC,10 = JP2, 11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = 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;*/ ?> |