温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php图像处理类的实例介绍

发布时间:2021-08-04 09:15:58 来源:亿速云 阅读:119 作者:chen 栏目:开发技术

这篇文章主要讲解了“php图像处理类的实例介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php图像处理类的实例介绍”吧!

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

<?php /**  * Image 类  */ class Image {  /**  * @var string $fileName 文件名  * @access private  */  private $fileName = '';  /**  * @var gd resource $imageResource 原图像  * @access private  */  private $imageResource = NULL;  /**  * @var int $imageWidth 原图像宽  * @access private  */  private $imageWidth = NULL;  /**  * @var int $imageHeight 原图像高  * @access private  */  private $imageHeight = NULL;  /**  * @var int $imageType 原图像类型  * @access private  */  private $imageType = NULL;  /**  * @var int $imageWidth 原图像宽  * @access private  */  public $width = NULL;  /**  * @var int $imageHeight 原图像高  * @access private  */  public $height = NULL;  /**  * @var int $imageType 原图像类型  * @access private  */  public $type = NULL;  /**  * @var int $newResource 新图像  * @access private  */  private $newResource = NULL;  /**  * @var int $newResType 新图像类型  * @access private  */  private $newResType = NULL;  /**  * 构造函数  * @param string $fileName 文件名    */  public function __construct($fileName = NULL) {  $this->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:  $endWidth3 = $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,0,0,$width,$height,$bg);  $tox=ceil(($width-$endWidth)/2);  $toy=ceil(($height-$endHeight)/2);  if($tox<0) $tox=0;  if($toy<0) $toy=0;  }else if ($flag==4) {  $this->newResource = imagecreatetruecolor($endWidth3,$endHeight2);  }else {  $this->newResource = imagecreatetruecolor($endWidth,$endHeight);  }  $this->newResType = $this->imageType;  imagecopyresampled($this->newResource, $this->imageResource, $tox, $toy, 0, 0, $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),0,"./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->imageWidth - $waterWidth));   $posY = rand(0,($this->imageHeight - $waterHeight));   break;     }  imagealphablending($this->imageResource, true);   if($isWaterImage) {  imagecopy($this->imageResource, $waterImgRes, $posX, $posY, 0, 0, $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, $posX, $posY, $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, $height, $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,1,2));  $bgG = hexdec(substr($backgroundColor,3,2));  $bgB = hexdec(substr($backgroundColor,5,2));  $backgroundColor = imagecolorallocate($this->newResource, $bgR, $bgG, $bgB);  $tR = hexdec(substr($textColor,1,2));  $tG = hexdec(substr($textColor,3,2));  $tB = hexdec(substr($textColor,5,2));  $textColor = imagecolorallocate($this->newResource, $tR, $tG, $tB);  for ($i=0;$i<strlen($valid);$i++){   imagestring($this->newResource,5,$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, $fileName, $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, $fileName, $quality);  break;  case IMAGETYPE_XBM:  if ($fileName=='') {  header('Content-type: image/xbm');  }  imagexbm($imageSrc, $fileName, $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图像处理类的实例介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI