PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php图像处理类实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP图像处理类。分享给大家供大家参。具体如下:

PHP;">
fileName = $fileName;
 if ($this->fileName) {
 $this->getSrcImageInfo();
 }
 }
 /**
 * 取源图像信息
 * @access private
 * @return void
 */
 private function getSrcImageInfo() {
 $info = $this->getImageInfo();
 $this->imageWidth = $info[0];
 $this->imageHeight = $info[1];
 $this->imageType = $info[2];
 $this->width = $info[0];
 $this->height = $info[1];
 $this->type = $info[2];
 }
 /**
 * 取图像信息
 * @param string $fileName 文件名
 * @access private
 * @return array
 */
 private function getImageInfo($fileName = NULL) {
 if ($fileName==NULL) {
 $fileName = $this->filename;
 }
 $info = getimagesize($fileName);
 return $info;
 }
 /**
 * 创建源图像GD 资源
 * @access private
 * @return void
 */
 private function createSrcImage () {
 $this->imageresource = $this->createImageFromFile();
 }
 /**
 * 跟据文件创建图像GD 资源
 * @param String $filename 文件名
 * @return gd resource
 */
 public function createImageFromFile($filename = NULL)
 {
 if (!$fileName) {
 $filename = $this->filename;
 $imgType = $this->imageType;
 }
 if (!is_readable($fileName) || !file_exists($fileName)) {
  throw new Exception('Unable to open file "' . $filename . '"');
 }
 if (!$imgTypE) {
 $imageInfo = $this->getImageInfo($fileName);
 $imgType = $imageInfo[2];
 }
 switch ($imgTypE) {
 case IMAGETYPE_GIF:
 $tempresource = imagecreatefromgif($fileName);
 break;
 case IMAGETYPE_JPEG:
 $tempresource = imagecreatefromjpeg($fileName);
 break;
 case IMAGETYPE_PNG:
 $tempresource = imagecreatefrompng($fileName);
 break;
 case IMAGETYPE_WBMP:
 $tempresource = imagecreatefromwbmp($fileName);
 break;
 case IMAGETYPE_XBM:
 $tempresource = imagecreatefromxbm($fileName);
 break;
 default:
 throw new Exception('Unsupport image type');
 }
 return $tempresource;
 }
 /**
 * 改变图像大小
 * @param int $width 宽
 * @param int $height 高
 * @param String $flag 一般而言,允许截图则用4,不允许截图则用1; 假设要求一个为4:3比例的图像,则:4=如果太长则自动刪除一部分 0=长宽转换成参数指定的 1=按比例缩放,自动判断太长还是太宽,长宽约束在参数指定内 2=以宽为约束缩放 3=以高为约束缩放
 * @param String $bgcolor 如果不为null,则用这个参数指定的颜色作为背景色,并且图像扩充到指定高宽,该参数应该是一个数组;
 * @return String
 */
 public function resizeImage($width,$height,$flag=1,$bgcolor=null) {
 $widthRatio = $width/$this->imageWidth;
 $heightRatio = $height/$this->imageHeight;
 switch ($flag) {
 case 1:
 if ($this->imageHeight < $height="" &&="" $this-="">imageWidth < $width)="" {="" $endwidth="$this-">imageWidth;
 $endHeight = $this->imageHeight;
 //return;
 } elseif (($this->imageHeight * $widthRatio)>$height) {
 $endWidth = ceil($this->imageWidth * $heightRatio);
 $endHeight = $height;
 } else {
 $endWidth = $width;
 $endHeight = ceil($this->imageHeight * $widthRatio);
 }
 break;
 case 2:
 $endWidth = $width;
 $endHeight = ceil($this->imageHeight * $widthRatio);
 break;
 case 3:
 $endWidth = ceil($this->imageWidth * $heightRatio);
 $endHeight = $height;
 break;
 case 4:
 $endWidth2 = $width;
 $endHeight2 = $height;
 if ($this->imageHeight < $height="" &&="" $this-="">imageWidth < $width)="" {="" $endwidth="$this-">imageWidth;
 $endHeight = $this->imageHeight;
 //return;
 } elseif (($this->imageHeight * $widthRatio)<$height) {="" $endwidth="ceil($this-">imageWidth * $heightRatio);
 $endHeight = $height;
 } else {
 $endWidth = $width;
 $endHeight = ceil($this->imageHeight * $widthRatio);
 }
 break;
 default:
 $endWidth = $width;
 $endHeight = $height;
 break;
 }
 if ($this->imageresource==NULL) {
 $this->createSrcImage();
 }
 if($bgcolor){
 $this->newresource = imagecreatetruecolor($width,$height);
 $bg=ImageColorAllocate($this->newresource,$bgcolor[0],$bgcolor[1],$bgcolor[2]);
 ImageFilledRectangle($this->newresource,$width,$bg);
 $tox=ceil(($width-$endWidth)/2);
 $toy=ceil(($height-$endHeight)/2);
 if($tox<0) $tox="0;"><0) $toy="0;" }else="" if="" ($flag="=4)" {="" $this-="">newresource = imagecreatetruecolor($endWidth2,$endHeight2);
 }else {
 $this->newresource = imagecreatetruecolor($endWidth,$endHeight);
 }
 $this->newResType = $this->imageType;
 imagecopyresampled($this->newresource,$this->imageresource,$tox,$toy,$endWidth,$endHeight,$this->imageWidth,$this->imageHeight);
 }
 /**
 * 给图像加水印
 * @param String $waterContent 水印内容可以是图像文件名,也可以是文字
 * @param int $pos 位置0-9可以是数组
 * @param int $textFont 字体大字,当水印内容文字时有效
 * @param String $textColor 文字颜色,当水印内容文字时有效
 * @return String
 */
 public function waterMark($waterContent,$pos = 0,$textFont=5,$textColor="#ffffff") {
 $isWaterImage = file_exists($waterContent);
 if ($isWaterImagE) {
 $waterImgRes = $this->createImageFromFile($waterContent);
 $waterImgInfo = $this->getImageInfo($waterContent);
 $waterWidth = $waterImgInfo[0];
 $waterHeight = $waterImgInfo[1];
 } else {
 $waterText = $waterContent;
 //$temp = @imagettfbBox(ceil($textFont*2.5),"./cour.ttf",$waterContent);
 if ($temp) {
 $waterWidth = $temp[2]-$temp[6];
 $waterHeight = $temp[3]-$temp[7];
 } else {
 $waterWidth = 100;
 $waterHeight = 12;
 }
 }
 if ($this->imageresource==NULL) {
 $this->createSrcImage();
 }
 switch($pos) 
 { 
 case 0://随机 
 $posx = rand(0,($this->imageWidth - $waterWidth)); 
 $posy = rand(0,($this->imageHeight - $waterHeight)); 
 break; 
 case 1://1为顶端居左 
 $posx = 0; 
 $posy = 0; 
 break; 
 case 2://2为顶端居中 
 $posx = ($this->imageWidth - $waterWidth) / 2; 
 $posy = 0; 
 break; 
 case 3://3为顶端居右 
 $posx = $this->imageWidth - $waterWidth; 
 $posy = 0; 
 break; 
 case 4://4为中部居左 
 $posx = 0; 
 $posy = ($this->imageHeight - $waterHeight) / 2; 
 break; 
 case 5://5为中部居中 
 $posx = ($this->imageWidth - $waterWidth) / 2; 
 $posy = ($this->imageHeight - $waterHeight) / 2; 
 break; 
 case 6://6为中部居右 
 $posx = $this->imageWidth - $waterWidth; 
 $posy = ($this->imageHeight - $waterHeight) / 2; 
 break; 
 case 7://7为底端居左 
 $posx = 0; 
 $posy = $this->imageHeight - $waterHeight; 
 break; 
 case 8://8为底端居中 
 $posx = ($this->imageWidth - $waterWidth) / 2; 
 $posy = $this->imageHeight - $waterHeight; 
 break; 
 case 9://9为底端居右 
 $posx = $this->imageWidth - $waterWidth-20; 
 $posy = $this->imageHeight - $waterHeight-10; 
 break; 
 default://随机 
 $posx = rand(0,($this->imageHeight - $waterHeight)); 
 break;   
 }
 imagealphablending($this->imageresource,truE); 
 if($isWaterImagE) {
 imagecopy($this->imageresource,$waterImgRes,$posx,$posy,$waterWidth,$waterHeight);  
 } else { 
 $R = hexdec(substr($textColor,1,2)); 
 $G = hexdec(substr($textColor,3,2)); 
 $B = hexdec(substr($textColor,5)); 
 $textColor = imagecolorallocate($this->imageresource,$R,$G,$B);
 imageString ($this->imageresource,$textFont,$waterText,$textColor);     
 }
 $this->newresource = $this->imageresource;
 $this->newResType = $this->imageType;
 }
 /**
 * 生成验证码图片
 * @param int $width 宽
 * @param String $height 高
 * @param int $length 长度
 * @param int $validType 0=数字,1=字母,2=数字加字母
 * @param String $textColor 文字颜色
 * @param String $BACkgroundColor 背景颜色
 * @return void
 */
 public function imageValidate($width,$length = 4,$validType = 1,$textColor = '#000000',$BACkgroundColor = '#ffffff') {
 if ($validType==1) {
 $validString = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRstuVWXYZ';
 $validLength = 52;
 } elseif ($validType==2) {
 $validString = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRstuVWXYZ';
 $validLength = 62;
 } else {
 $validString = '123456789';
 $validLength = 9;
 }
 srand((int)time());
 $valid = '';
 for ($i=0; $i<$length; $i++)="" {="" $valid="" .="$validString{rand(0,$validLength-1)};" }="" $this-="">newresource = imagecreate($width,$height);
 $bgR = hexdec(substr($BACkgroundColor,2));
 $bgG = hexdec(substr($BACkgroundColor,2));
 $bgB = hexdec(substr($BACkgroundColor,5,2));
 $BACkgroundColor = imagecolorallocate($this->newresource,$bgR,$bgG,$bgB);
 $tR = hexdec(substr($textColor,2));
 $tG = hexdec(substr($textColor,2));
 $tB = hexdec(substr($textColor,2));
 $textColor = imagecolorallocate($this->newresource,$tR,$tG,$tB);
 for ($i=0;$inewresource,$i*$width/$length+3,2,$valid[$i],$textColor); 
 }
 $this->newResType = IMAGETYPE_JPEG;
 return $valid;
 }
 /**
 * 显示输出图像
 * @return void
 */
 public function display($filename='',$quality=100) {
 $imgType = $this->newResType;
 $imageSrc = $this->newresource;
    switch ($imgTypE) {
 case IMAGETYPE_GIF:
 if ($filename=='') {
 header('Content-type: image/gif');
 }
 imagegif($imageSrc,$filename,$quality);
 break;
 case IMAGETYPE_JPEG:
 if ($filename=='') {
 header('Content-type: image/jpeg');
 }
 imagejpeg($imageSrc,$quality);
 break;
 case IMAGETYPE_PNG:
 if ($filename=='') {
 header('Content-type: image/png');
 imagepng($imageSrc);
 } else {
 imagepng($imageSrc,$fileName);
 }
 break;
 case IMAGETYPE_WBMP:
 if ($filename=='') {
 header('Content-type: image/wbmp');
 }
 imagewbmp($imageSrc,$quality);
 break;
 case IMAGETYPE_XBM:
 if ($filename=='') {
 header('Content-type: image/xbm');
 }
 imagexbm($imageSrc,$quality);
 break;
 default:
 throw new Exception('Unsupport image type');
 }
 imagedestroy($imageSrc);
 }
 /**
 * 保存图像
 * @param int $filenameType 文件名类型 0使用原文件名,1使用指定的文件名,2在原文件加上后缀,3产生随机文件名
 * @param String $folder 文件夹路径 为空为与原文件相同
 * @param String $param 参数$filenameType为1时为文件名2时为后缀
 * @return void
 */
 public function save($filenameType = 0,$folder = NULL,$param = '_miniature') {
 if ($folder==NULL) {
 $folder = dirname($this->fileName).DIRECTORY_SEPARATOR;
 }
 $fileExtName = FileSystem::fileExt($this->filename,truE);
 $fileBesicName = FileSystem::getBasicName($this->filename,falsE);
 switch ($filenameTypE) {
 case 1:
 $newFilename = $folder.$param;
 break;
 case 2:
 $newFilename = $folder.$fileBesicName.$param.$fileExtName;
 break;
 case 3:
 $tmp = date('ymdHis');
 $fileBesicName = $tmp;
 $i = 0;
 while (file_exists($folder.$fileBesicName.$fileExtName)) {
 $fileBesicName = $tmp.$i;
 $i++;
 }
 $newFilename = $folder.$fileBesicName.$fileExtName;
 break;
 default:
 $newFilename = $this->filename;
 break;
 }
 $this->display($newFileName);
 return $newFilename;
 }
}
?>

大佬总结

以上是大佬教程为你收集整理的php图像处理类实例全部内容,希望文章能够帮你解决php图像处理类实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。