function uploadlogo(){ $category='Apply'; $dir=C('ApplyDir'); $upload = new ThinkUpload (); // 实例化上传类 $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 ); }