圖片處理類待糾正

<?php
/**
 * Image.class.php 圖像處理類
 * @author Administrator
 *
 */
class Image{
    
    private $path='';
    /**
     * 構造方法
     * @param unknown $path
     */
    function __construct($path=''){
        if (!empty($path)) {
            $this->path=$path;
        }
    }
    /**
     +-----------------------------------------------
     * 等比縮放函數
     +----------------------------------------------- 
     * @param unknown $name  需處理圖片的名稱
     * @param unknown $width  縮放後的寬度
     * @param unknown $height 縮放後的高度
     * @param string $thumb_prixs 縮放後的前綴名
     * @return mixed $newname  返回的縮放後的文件名 
     */
    function thumb($name,$width,$height,$thumb_prixs='th_'){
        //獲取圖片信息
        $Info=$this->ImageInfo($name); //圖片的寬度,高度,類型
        //獲取圖片資源,各類類型的圖片均可以建立資源,jpg,gif,png
        $imagres=$this->Img_resouce($name, $Info);
        //獲取計算圖片等比例以後的大小,
        $size=$this->getNewSize($name,$width,$height,$Info);
        //獲取新的圖片資源,處理透明背景
        $newimg=$this->getImage($imagres,$size,$Info);
        //另存爲一個新的圖片,返回新的縮放後的圖片名稱
        $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info);
        return $newname; 
    }
    
    /**
     +-----------------------------------------------------------------------
     * 水印標記函數
     +----------------------------------------------------------------------- 
     * @param unknown $backname   背景文件名
     * @param unknown $watername  水印文件名
     * @param number $waterpos    水印位置
     * @param string $wa_prixs    水印前綴名
     * @return boolean
     */
    function waterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_') {
        
        if (file_exists($this->path.$backname) && file_exists($this->path.$watername)) {
            
            $backinfo=$this->ImageInfo($backname);
            
            $waterinfo=$this->ImageInfo($watername);
            
            if(!$pos=$this->getPos($backinfo, $waterinfo, $waterpos)){
                echo "水印圖片不該該比背景圖片小";
                return false;
            }
              $backimg=$this->Img_resouce($backname, $backinfo);
              
              $waterimg=$this->Img_resouce($watername, $waterinfo);
              var_dump($backimg);exit();
              $backimg=$this->CopyImage($backimg, $waterimg, $pos, $waterinfo);
              
              $this->SaveNewImage($backimg, $wa_prixs.$backname, $backinfo);
        }else{
            
            echo "圖片或水印不存在";
            return false;
        }
    }
    /**
     +----------------------------------------------------------------------- 
     * 獲取圖片信息函數
     +----------------------------------------------------------------------- 
     * @param unknown $name
     * @return unknown
     */
    
     private function ImageInfo($img) {
        $imageInfo=getimagesize($img);
        if ($imageInfo!==false) {
            $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1));
            $imageSize=filesize($img);
            $Info=array(
                "width" => $imageInfo[0],
                "height" => $imageInfo[1],
                "type" => $imageType,
                "size" => $imageSize,
                "mime" => $imageInfo['mime']
            );
            return $Info;
        }else{
            return false;
        }    
    }
    
    
    /**
     +--------------------------------------------------------
     * 建立原圖像格式函數
     +--------------------------------------------------------
     * @param unknown $name
     * @param unknown $imaginfo
     * @return boolean|resource
     */
    private function Img_resouce($name,$imageinfo){
        $iamgeres=$this->path.$name;
        //var_dump($iamgeres);exit();
         switch ($imageinfo['type']) {
             case 'gif':
               $img=imagecreatefromgif($name);
                   break;
             case 'jpg':
               $img=imagecreatefromjpeg($name);
                   break;
             case 'png':
               $img=imagecreatefrompng($name);
                   break;                           
         }
         return $img;
    }
    /**
     +-------------------------------------------------- 
     * 獲取等比縮放尺寸函數
     +-------------------------------------------------- 
     * @param unknown $name
     * @param unknown $width
     * @param unknown $height
     * @param unknown $imaginfo
     * @return Ambigous <unknown, number>
     */
    private function getNewSize($name,$width,$height,$imaginfo){
             $size['width']=$imaginfo['width'];
             $size['height']=$imaginfo['height'];
        if ($width<$imaginfo['width']) {
            $size['width']=$width;
        }
        if ($height<$imaginfo['height']) {
            $size['height']=$height;
        }
        //圖像等比例縮放算法
        if ($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']) {
            $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']);
        }else{
            $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']);
        }
        return  $size;  
    }
    private function getImage($imageres,$size,$imageinfo){
        //新建一個真彩色圖像
        $newimg=imagecreatetruecolor($size['width'], $size['height']);
        //將某個顏色定義爲透明色
        $otsc=imagecolortransparent($imageres);
        //獲取圖像的調色板的顏色數目
        if ($otsc>=0&&$otsc<=imagecolorstotal($imageres)) {
            //取得某索引的顏色
            $stran=imagecolorsforindex($imageres, $otsc);
            //爲圖像分配顏色
            $newt=imagecolorallocate($imageres, $stran['red'], $stran['green'], $stran['blue']);
            //區域填充函數
            imagefill($newimg, 0, 0, $newt);
            //爲圖像定義透明色
            imagecolortransparent($newimg,$newt);        
        }
   
     imagecopyresized($newimg, $imageres, 0, 0, 0, 0, $size['width'], 
$size['height'], $imageinfo['width'], $imageinfo['height']);    
        
        imagedestroy($imageres);
        
        return $newimg; 
      }
      /**
       +---------------------------------------------- 
       *保存圖像函數 
       +----------------------------------------------
       * @param unknown $newimg
       * @param unknown $newname
       * @param unknown $imageinfo
       * @return unknown  
       */
      private function SaveNewImage($newimg,$newname,$imageinfo){
          switch ($imageinfo['type']){
              case 1://gif
                  $result=imagegif($newimg,$this->path.$newname);
                  break;
              case 2://jpg
                  $result=imagejpeg($newimg,$this->path.$newname);
                  break;
              case 3://png
                  $result=imagepng($newimg,$this->path.$newname);
                  break;
          }
          imagedestroy($newimg);
          return $newname;
      }
      
      /**
       +-----------------------------------------------------------------
       * 獲取水印位置函數
       +----------------------------------------------------------------- 
       * @param unknown $backinfo    背景信息
       * @param unknown $waterinfo   水印信息
       * @param unknown $waterpos    水印位置
       * @return boolean|multitype:number  返回座標數組
       */
      private function getPos($backinfo,$waterinfo,$waterpos) {
          
          if ($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']) {
              return false;
          }
          switch ($waterpos) {
              
              case 1://左上角
                 $posX=0;
                 $posY=0;
                    break;
              case 2://中上方
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=0;
                    break;
              case 3://右上角
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=0;
                    break;
              case 4://左中方
                  $posX=0;
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 5://正中間
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 6://右中方
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=$backinfo['height']-$waterinfo['height']/2;
                    break;
              case 7://底部靠左
                  $posX=0;
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 8://底部居中
                  $posX=$backinfo['width']-$waterinfo['width']/2;
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 9://底部靠右
                  $posX=$backinfo['width']-$waterinfo['width'];
                  $posY=$backinfo['height']-$waterinfo['height'];
                    break;
              case 0:
              default :
                  $posX=rand(0,$backinfo['width']-$waterinfo['width']);
                  $posY=rand(0,$backinfo['height']-$waterinfo['height']);
                    break;
          }
          return array('posX'=>$posX,'posY'=>$posY);
      }
      /**
       +------------------------------------------------------------------- 
       * 拷貝圖像
       +-------------------------------------------------------------------
       * @param unknown $backimg     背景資源
       * @param unknown $waterimg    水印資源
       * @param unknown $pos         水印位置
       * @param unknown $waterinfo   水印信息
       * @return unknown
       */
      private function CopyImage($backimg,$waterimg,$pos,$waterinfo) {
           
          imagecopy($backimg, $waterimg, $pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']);
          imagedestroy($waterimg);          
           return $backimg;
      }
        
}
?>
相關文章
相關標籤/搜索