php 代码
- <?php
- /**
- *@package Image
- *@use 图片处理
- *@author 刘建武 tianhao86@hotmail.com
- **/
- class Image {
- public function __construct() {
- }
- /******************************************************************************
- *函数名称:thumb
- *函数功能:自动生成缩略图函数
- *参数 :$srcFile,$dstimg,$dstW,$dstH,$power,$out,$quality
- *参数意义:
- $srcFile: 图片源文件;
- $dstimg: 图片目标文件;
- $dstW: 要求缩略图的宽;
- $dstH: 要求缩略图的高;
- $power: 缩略类型,缺省值 0
- 0 表示按比例缩放,宽高不大于要求的宽高;
- 1 表示按比例缩放宽高不小于要求,在中部切割;
- 其他任何值,不按比例缩放为要求的宽高;
- $out: 是否把缩略图输出到浏览器,缺省值 0
- 0 或其他任何值,不输出;
- 1 输出;
- $quality: 图片的压缩质量(1到100),缺省值 100
- *返回类型:bool,false 表示执行错误;true 表示执行成功;
- *******************************************************************************/
- static public function thumb($srcFile,$dstimg,$dstW,$dstH,$power=0,$out=0,$quality=100) {
- if(!file_exists($srcFile)) return false; //如果源文件部存在就返回false
- $data = GetImageSize($srcFile);
- $srcW = $data[0]; //图片宽度,单位是像素 (pixel)
- $srcH = $data[1]; //图片高度,单位是像素 (pixel)
- $dsX = 0; //paste开始的x坐标,单位是像素 (pixel)
- $dsY = 0; //paste开始的y坐标,单位是像素 (pixel)
- $srX = 0; //copy开始的x坐标,单位是像素 (pixel)
- $srY = 0; //copy开始的y坐标,单位是像素 (pixel)
- if(!$dstW>0 || !$dstH>0) return false; //如果宽高有一个小于零,返回false
- if($power==0) { //如果是自动按比例 缩放处理预定义的宽高参数
- if($dstW/$dstH >= $srcW/$srcH) { //原图片太高
- $dstW = $srcW * ($dstH/$srcH);
- }
- else { //原图片太宽
- $dstH = $srcH * ($dstW/$srcW);
- }//end if
- }
- elseif($power==1) { //如果是按比例缩放后 切其中部的位置处理
- if($dstW/$dstH >= $srcW/$srcH) { //原图片太高
- $srcH = $dstH * $srcW/$dstW;
- $srY = ($data[1]-$srcH)/2;
- }
- else { //原图片太宽
- $srcW = $dstW * $srcH/$dstH;
- $srX = ($data[0]-$srcW)/2;
- }//end if
- }//end if
- switch($data[2]) {
- case 1: //图片类型,1是GIF图
- $im = @imagecreatefromgif($srcFile);
- break;
- case 2: //图片类型,2是JPG图
- $im = @imagecreatefromjpeg($srcFile);
- break;
- case 3: //图片类型,3是PNG图
- $im = @imagecreatefrompng($srcFile);
- break;
- }//end switch
- ///判断系统是否支持真彩函数
- if (!$ni = @imagecreatetruecolor($dstW,$dstH)) {
- $ni = @imagecreate($dstW,$dstH);
- }//end if
- if (function_exists("imagecopyresampled")) { ///判断系统是否支持真彩copy函数
- imagecopyresampled($ni,$im,$dsX,$dsY,$srX,$srY,$dstW,$dstH,$srcW,$srcH);
- }
- else {
- imagecopyresized($ni,$im,$dsX,$dsY,$srX,$srY,$dstW,$dstH,$srcW,$srcH);
- }//end if
- if(is_int($quality)==false) { //如果质量参数不是integer类型,则强制设置类型
- settype($quality, "integer");
- }//end if
- if($quality>100 || $quality<1) { //如果质量参数没有在1到100之间,则设置为100
- $quality = 100;
- }//end if
- imagejpeg($ni,$dstimg,$quality);
- if($out==1) { //如果要求输出到浏览器,,则输出
- ImageJpeg($ni);
- }//end if
- return $dstimg;
- }//end function thumb
- /**
- * 截取固定大小的图片
- * $srcFile: 图片源文件;
- */
- static public function MakePic($pSrcFile, $pWidth, $pHeight, $pThumpFile){
- if(!file_exists($pSrcFile)) return false;
- $image = $pSrcFile; // 原图
- $imgstream = file_get_contents($image);
- $im = imagecreatefromstring($imgstream);
- $x = imagesx($im);
- $y = imagesy($im);
- $data = GetImageSize($pSrcFile);
- $srcW = $data[0]; //图片宽度,单位是像素 (pixel)
- $srcH = $data[1]; //图片高度,单位是像素 (pixel)
- $dsX = 0; //paste开始的x坐标,单位是像素 (pixel)
- $dsY = 0; //paste开始的y坐标,单位是像素 (pixel)
- $srX = ceil($srcW/2-$pWidth/2); //copy开始的x坐标,单位是像素 (pixel)
- if($srX<0) $srX = 0;
- $srY = ceil($srcH/2-$pHeight/2); //copy开始的y坐标,单位是像素 (pixel)
- if($srY<0) $srY = 0;
- $thumbw = $pWidth; // 期望的目标图宽
- $thumbh = $pHeight; // 期望的目标图高
- if($srcW<$thumbw) return false;
- if(function_exists("imagecreatetruecolor")){
- $dim = imagecreatetruecolor($thumbw, $thumbh); // 创建目标图gd2
- }
- else{
- $dim = imagecreate($thumbw, $thumbh); // 创建目标图gd1
- }
- $ok = imagecopyresized ($dim,$im, $dsX, $dsY, $srX, $srY, $thumbw,$thumbh,$thumbw,$thumbh);
- switch($data[2]) {
- case 1: //图片类型,1是GIF图
- imagegif($dim, $pThumpFile);;
- break;
- case 2: //图片类型,2是JPG图
- imagejpeg($dim, $pThumpFile);
- break;
- case 3: //图片类型,3是PNG图
- imagepng($dim, $pThumpFile);
- break;
- }//end switch
- return $ok;
- }
- }
- ?>