phpͼÏñ´¦ÀíÀàʵÀý

5年以前  |  阅读数:1102 次  |  编程语言:PHP 

±¾ÎÄʵÀý½²ÊoÁËphpͼÏñ´¦ÀiÀa¡£*ÖÏi¸ø´o¼Ò¹(C)´o¼Ò²Î¿¼¡£¾ßÌaÈçÏ£º


    <?php
    /**
     * Image Àa
     */
    class Image {
     /**
     * @var string $fileName ÎļþÃu
     * @access private
     */
     private $fileName = '';
     /**
     * @var gd resource $imageResource ԭͼÏñ
     * @access private
     */
     private $imageResource = NULL;
     /**
     * @var int $imageWidth ԭͼÏñ¿i
     * @access private
     */
     private $imageWidth = NULL;
     /**
     * @var int $imageHeight ԭͼÏñ¸ß
     * @access private
     */
     private $imageHeight = NULL;
     /**
     * @var int $imageType ԭͼÏñÀaÐÍ
     * @access private
     */
     private $imageType = NULL;
     /**
     * @var int $imageWidth ԭͼÏñ¿i
     * @access private
     */
     public $width = NULL;
     /**
     * @var int $imageHeight ԭͼÏñ¸ß
     * @access private
     */
     public $height = NULL;
     /**
     * @var int $imageType ԭͼÏñÀaÐÍ
     * @access private
     */
     public $type = NULL;
     /**
     * @var int $newResource ÐÂͼÏñ
     * @access private
     */
     private $newResource = NULL;
     /**
     * @var int $newResType ÐÂͼÏñÀaÐÍ
     * @access private
     */
     private $newResType = NULL;
     /**
     * ¹¹Ôiº¯Êý
     * @param string $fileName ÎļþÃu
       */
     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 ÎļþÃu
     * @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();
     }
     /**
     * ¸u¾ÝÎļþ´´½¨Í¼ÏñGD ×ÊÔ´
     * @param string $fileName ÎļþÃu
     * @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;
     }
     /**
     * ¸Ä±aͼÏñ´oС
     * @param int $width ¿i
     * @param int $height ¸ß
     * @param string $flag Ò»°a¶øÑÔ,ÔÊÐi½ØͼÔoÓÃ4,²»ÔÊÐi½ØͼÔoÓÃ1; ¼ÙÉeÒªÇoÒ»¸oΪ4:3±ÈÀýµÄͼÏñ,Ôo:4=Èç¹uÌ«³¤Ôo×Ô¶¯„h³ýÒ»²¿*Ö 0=³¤¿iת»»³É²ÎÊýÖ¸¶¨µÄ 1=°´±ÈÀýËo*Å,×Ô¶¯ÅжÏÌ«³¤»¹ÊÇÌ«¿i,³¤¿iÔ¼ÊøÔÚ²ÎÊýÖ¸¶¨ÄÚ 2=ÒÔ¿iΪԼÊøËo*Å 3=ÒÔ¸ßΪԼÊøËo*Å
     * @param string $bgcolor Èç¹u²»Îªnull,ÔoÓÃÕa¸o²ÎÊýÖ¸¶¨µÄÑÕÉ«×÷Ϊ±³¾°É«,²¢ÇÒͼÏñÀ(C)³aµ½Ö¸¶¨¸ß¿i,¸Ã²ÎÊýÓ¦¸ÃÊÇÒ»¸oÊý×e;
     * @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 ˮӡÄÚÈÝ¿ÉÒÔÊÇͼÏñÎļþÃu£¬Ò²¿ÉÒÔÊÇÎÄ×Ö
     * @param int $pos λÖÃ0-9¿ÉÒÔÊÇÊý×e
     * @param int $textFont ×ÖÌa´o×Ö£¬µ±Ë®Ó¡ÄÚÈÝÊÇÎÄ×ÖʱÓÐЧ
     * @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://Ëae»u 
     $posX = rand(0,($this->imageWidth - $waterWidth)); 
     $posY = rand(0,($this->imageHeight - $waterHeight)); 
     break; 
     case 1://1Ϊ¶¥¶Ë¾Ó×o 
     $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ΪÖв¿¾Ó×o 
     $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Ϊµ×¶Ë¾Ó×o 
     $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://Ëae»u 
     $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;
     }
     /**
     * Éu³ÉÑeÖ¤ÂeͼƬ
     * @param int $width ¿i
     * @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;
     }
     /**
     * ÏÔʾÊa³oͼÏñ
     * @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);
     }
     /**
     * ±£´aeͼÏñ
     * @param int $fileNameType ÎļþÃuÀaÐÍ 0ʹÓÃÔ­ÎļþÃu£¬1ʹÓÃÖ¸¶¨µÄÎļþÃu£¬2ÔÚÔ­ÎļþÃu¼ÓÉϺo׺£¬3²uÉuËae»uÎļþÃu
     * @param string $folder Îļþ¼ÐÂ*¾¶ Ϊ¿ÕΪÓeÔ­ÎļþÏaͬ
     * @param string $param ²ÎÊý$fileNameTypeΪ1ʱΪÎļþÃu2ʱΪºo׺
     * @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;
     }
    }
    ?>

Ï£Íu±¾ÎÄËuÊo¶Ô´o¼ÒµÄphp³ÌÐoÉe¼ÆÓÐËu°iÖu¡£

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例