裁切圖片

// 裁切圖片類

<?php
class ge_image{
    /**
     * 獲取文件擴展名
     * @return string
     */
    function fileExt($file_name){
        return addslashes(strtolower(substr(strrchr($file_name, '.'), 1, 10)));
    }
    /**
     * 根據擴展名判斷文件是否爲圖像
     * @param string $ext 擴展名
     * @return bool
     */
    function isImageExt($ext){
        static $img_ext  = array('jpg', 'jpeg', 'png', 'bmp','gif','giff');
        return in_array($ext, $img_ext) ? 1 : 0;
    }
    /**
     * 獲取圖像信息
     * @param string $target 文件路徑
     * @return mixed
     */
    function getImageInfo($target){
        $ext = ge_image::fileExt($target);
        $is_image = ge_image::isImageExt($ext);
        if(!$is_image)
            return false;
        elseif(!is_readable($target))
            return false;
        elseif($image_info = @getimagesize($target)){
            list($width, $height, $type) = !empty($image_info) ? $image_info : array('', '', '');
            $size = $width * $height;
            if($is_image && !in_array($type, array(1,2,3,6,13)))
                return false;
            $image_info['type'] = strtolower(substr(image_type_to_extension($image_info[2]),1));
            return $image_info;
        }
        else
            return false;
    }
    /**
     +----------------------------------------------------------
     * 生成圖像驗證碼
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $length  位數
     * @param string $mode  類型
     * @param string $type 圖像格式
     * @param string $width  寬度
     * @param string $height  高度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static function buildImageVerify($length=4,$mode=1,$type='gif',$width=58,$height=26,$verifyName='verify'){
        require_once APP_ROOT_PATH."system/utils/ge_string.php";
        $randval = ge_string::rand_string($length,$mode);
        ge_session::set($verifyName,md5($randval));
        $width = ($length*10+10)>$width?$length*10+10:$width;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
        $r = Array(255,255,255,255);
        $g = Array(255,255,255,255);
        $b = Array(255,255,255,255);
        $key = mt_rand(0,3);
        $backColor = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);    //背景色(隨機)
        $borderColor = imagecolorallocate($im, 100, 100, 100);                    //邊框色
        $pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));                 //點顏色
        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor);
        $stringColor = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120));
        // 干擾
//        for($i=0;$i<10;$i++){
//                $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//                imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
//        }
        for($i=0;$i<25;$i++){
                $fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
                imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor);
        }
//        for($i=0;$i<$length;$i++) {
//                imagestring($im,5,$i*10+5,mt_rand(1,8),$randval{$i}, $stringColor);
//        }
        @imagestring($im, 5, 5, 3, $randval, $stringColor);
        ge_image::output($im,$type);
    }
    static function output($im,$type='gif',$filename=''){
        ob_clean();
        header("Content-type: image/".$type);
        $ImageFun='image'.$type;
        if(empty($filename)) {
            if(!$ImageFun($im)){
                ob_clean();
                header("Content-type: image/jpeg");
                if(!imagejpeg($im)){
                    ob_clean();
                    header("Content-type: image/png");
                    if(!imagepng($im)){
                        ge_session::delete("verify");
                    }
                }
            }
        }else{
            $ImageFun($im,$filename);
        }
        
        imagedestroy($im);
    }
    public function thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,$interlace=true,$filepath = ''){
        $info  = ge_image::getImageInfo($image);
        if($info !== false){
            $srcWidth  = $info[0];
            $srcHeight = $info[1];
            $type = $info['type'];
            $interlace  =  $interlace? 1:0;
            unset($info);
            if($maxWidth > 0 && $maxHeight > 0)
                    $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 計算縮放比例
            elseif($maxWidth == 0)
                    $scale = $maxHeight/$srcHeight;
            elseif($maxHeight == 0)
                    $scale = $maxWidth/$srcWidth;
            if($scale >= 1){
                // 超過原圖大小不再縮略
                $width   =  $srcWidth;
                $height  =  $srcHeight;
            }else{
                // 縮略圖尺寸
                $width  = (int)($srcWidth*$scale);
                $height = (int)($srcHeight*$scale);
            }
            if($gen == 1){
                $width = $maxWidth;
                $height = $maxHeight;
            }
            $paths = pathinfo($image);
            if(empty($filepath))
                $thumbname = $paths['dirname'].'/'.$paths['filename'].'_'.$maxWidth.'x'.$maxHeight.'.jpg';
            else
                $thumbname = $filepath;
            $thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname);
            // 載入原圖
            $createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
            if(!function_exists($createFun))
                    $createFun = 'imagecreatefromjpeg';
            $srcImg = $createFun($image);
            //創建縮略圖
            if($type!='gif' && function_exists('imagecreatetruecolor'))
                $thumbImg = imagecreatetruecolor($width, $height);
            else
                $thumbImg = imagecreate($width, $height);
                $x = 0;
                $y = 0;
                if($gen == 1 && $maxWidth > 0 && $maxHeight > 0){
                    $resize_ratio = $maxWidth/$maxHeight;
                    $src_ratio = $srcWidth/$srcHeight;
                    if($src_ratio >= $resize_ratio){
                        $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
                        $width = ($height * $srcWidth) / $srcHeight;
                    }else{
                        $y = ($srcHeight - ( (1 / $resize_ratio) * $srcWidth)) / 2;
                        $height = ($width * $srcHeight) / $srcWidth;
                    }
                }
            // 複製圖片
            if(function_exists("imagecopyresampled"))
                imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height, $srcWidth,$srcHeight);
            else
                imagecopyresized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,  $srcWidth,$srcHeight);
            if('gif'==$type || 'png'==$type) {
                $background_color  =  imagecolorallocate($thumbImg,  0,255,0);  //  指派一個綠色
                imagecolortransparent($thumbImg,$background_color);  //  設置爲透明色,若註釋掉該行則輸出綠色的圖
            }
            // 對jpeg圖形設置隔行掃描
            if('jpg'==$type || 'jpeg'==$type)
                imageinterlace($thumbImg,$interlace);
            // 生成圖片
            imagejpeg($thumbImg,$thumbname,100);
            imagedestroy($thumbImg);
            imagedestroy($srcImg);
            return array('url'=>$thumburl,'path'=>$thumbname);
         }
         return false;
    }
}
?>

// 裁切圖片方法

function get_spec_image($img_path,$width=0,$height=0,$gen=1){
    if($width==0&&$height==0)
        $new_path = $img_path;
    else{
        $img_name = substr($img_path,0,-4);
        $img_ext = substr($img_path,-3);
        $new_path = $img_name."_".$width."x".$height.".jpg";
        if(!file_exists(APP_ROOT_PATH.$new_path)){
            import('ORG.Util.ge_image');
            $image = new ge_image();
            $thumb = $image->thumb(APP_ROOT_PATH.$img_path,$width,$height,$gen);   //APP_ROOT_PATH 自定義的項目物理路徑
        }
    }
    return $new_path;
}


//方法調用

{:get_spec_image(圖片路徑,330,240)}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章