Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站导航为爱好php程序的朋友们提供php相关的教程知识。

图像处理在PhP程序中是必不可少的一部分,尤其对图片网站来说更是如此。缩小图片、生成验证码以及给图片加水印等。这里写了一个PhP程序 图像类,集成了PhP程序对图像的各种处理,大家可以学习下,也可以根据自己的需要写适合自己的单独的图像类。先不扯淡了,直接看这个图像处理类。hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?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=如果太长则自动�h除一部分 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,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($endWidth2,$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;
 }
}
?>


hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

具体代码如下比较多,但是对图像的各种处理都实现了!hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

名站网址导航

PhP程序 cookie实现访客访问次数的统计hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

hcKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于php程序的知识就说到这里希望可以帮助需要的朋友。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市