php画像処理

9596 ワード

    function uploadlogo(){

        $category='Apply';

        $dir=C('ApplyDir');

        $upload = new \Think\Upload (); //       

        $upload->maxSize = 0; //         

        $upload->exts =C('AllExts');

        $uploadpath = $_SERVER ['DOCUMENT_ROOT'] . __ROOT__ . $dir . '/';

        if (! file_exists ( $uploadpath )) {

            UtilController::mkDirs($uploadpath);

        }

        $upload->rootPath = $uploadpath; //          

        $upload->savePath = ''; //       ( )  

        $filename = date ( "YmdHis" ) . mt_rand ( 10000, 99999 );

        $upload->saveName = $filename; //         

        //     

        $info = $upload->upload ();

        if (! $info) { //           

            $this->error ( $upload->getError () );

        } else { //     

            $json['source']=C ( 'Web_Server' ).__ROOT__.$dir.'/'.$info ['Filedata'] ['savepath'] . $info ['Filedata'] ['savename'] ;

            //    

            $targetpath2=$uploadpath.$category.'Smallimg/';

            UtilController::mkDirs($targetpath2);

            UtilController::imagecropper($uploadpath.$info ['Filedata'] ['savepath'].$info ['Filedata'] ['savename'], 90, 90, $targetpath2.$info ['Filedata'] ['savename']);

            $json['url']=C ( 'Web_Server' ) . __ROOT__ . $dir.'/'.$category.'Smallimg/'.$info ['Filedata'] ['savename'];

            $this->ajaxReturn($json);

        }

    }

 
 
/**

 *        

 * @param unknown $path 

 * @param number $mode

 */

    static  function mkDirs($path, $mode = 0755) {

        $adir = explode ( '/', $path );

        $dirlist = '';

        $rootdir = array_shift ( $adir );

        if (($rootdir != '.' || $rootdir != '') && ! file_exists ( $rootdir )) {

            @mkdir ( $rootdir, $mode );

        }

        foreach ( $adir as $key => $val ) {

            $dirlist .= "/" . $val;

            $dirpath = $rootdir . $dirlist;

            if (! file_exists ( $dirpath )) {

                @mkdir ( $dirpath, $mode );

            }

        }

    }

 
    /**

     * @param unknown $source_path     

     * @param unknown $target_width      

     * @param unknown $target_height      

     * @param unknown $target_path     

     * @return boolean

     * @author    

     */

    static function imagecropper($source_path, $target_width, $target_height, $target_path) {

    	$source_info = getimagesize ( $source_path );

    	$source_width = $source_info [0];

    	$source_height = $source_info [1];

    	$source_mime = $source_info ['mime'];

    	$source_ratio = $source_height / $source_width;

    	$target_ratio = $target_height / $target_width;

    

    	//     

    	if ($source_ratio > $target_ratio) {

    		$cropped_width = $source_width;

    		$cropped_height = $source_width * $target_ratio;

    		$source_x = 0;

    		$source_y = ($source_height - $cropped_height) / 2;

    	} 		//     

    	elseif ($source_ratio < $target_ratio) {

    		$cropped_width = $source_height / $target_ratio;

    		$cropped_height = $source_height;

    		$source_x = ($source_width - $cropped_width) / 2;

    		$source_y = 0;

    	} 		//     

    	else {

    		$cropped_width = $source_width;

    		$cropped_height = $source_height;

    		$source_x = 0;

    		$source_y = 0;

    	}

    

    	switch ($source_mime) {

    		case 'image/gif' :

    			$source_image = imagecreatefromgif ( $source_path );

    			break;

    				

    		case 'image/jpeg' :

    			$source_image = imagecreatefromjpeg ( $source_path );

    			break;

    				

    		case 'image/png' :

    			$source_image = imagecreatefrompng ( $source_path );

    			break;

    				

    		default :

    			return false;

    			break;

    	}

    

    	$target_image = imagecreatetruecolor ( $target_width, $target_height );

    	$cropped_image = imagecreatetruecolor ( $cropped_width, $cropped_height );

    

    	//   

    	imagecopy ( $cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height );

    	//   

    	imagecopyresampled ( $target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height );

    

    	header ( 'Content-Type: image/jpeg' );

    	imagejpeg ( $target_image, $target_path );

    	imagedestroy ( $source_image );

    	imagedestroy ( $target_image );

    	imagedestroy ( $cropped_image );

    }