thinkphp上传图片并批量生成不同尺寸缩略图
1、配置信息
//****************************各种类型图片缩略图尺寸设置*************************//
"IMAGES_THUMB_SIZE_SETTING" =>array(
"USER_HEADER" =>array( //用户头像缩略图大小
"64*64" =>"64*64",
"32*32" =>"32*32"
),
"PHOTOS_HEADER" =>"128*128", //图片缩略图大小
"EMOTIONS_PHOTO" =>"128*128" //动态缩略图大小
),2、详细代码
/**
* 文件上传方法,TP在此处有个坑,当图片名称命名不规范时,图片不能保存而且不会提示错误
* 成功返回图片保存路径
* 失败返回相关失败信息
*/
public function upload(){
/**
* file_put_contents("1.txt",var_export($_POST,true));
* file_put_contents("2.txt",var_export($GLOBALS["HTTP_RAW_POST_DATA"],true));
* $raw_post_data = file_get_contents("php://input", "r");
* file_put_contents("3.txt",var_export($raw_post_data, true));
* file_put_contents("4.txt",var_export($_FILES, true));
*/
$user_id = I("post.user_id",0,"intval");
$type = I("get.type",1,"intval");//操作类型,1:用户头像上传,2:图片上传,3:说说图片上传
$token = $this->token;
$data = array();
if($user_id){
//user_id有传的话,那么说明是更新用户头像操作
$return = $this->check_user_valid($token,$user_id);
if(!$return){
$data["ret_code"] = C("API_STATUS_CODE.USER_DOES_NOT_HAVE_POWER");
$data["ret_msg"] = C("API_STATUS_CODE.USER_DOES_NOT_HAVE_POWER_MSG");
$this->ajaxReturn($data);
}
}
//设置文件存放路径及缩放比例
$folder = "";
$thumb_size = "";
switch($type){
case 1:
$folder = "header";
$thumb_size = C("IMAGES_THUMB_SIZE_SETTING.USER_HEADER");
break;
case 2:
$folder = "photos";
$thumb_size = C("IMAGES_THUMB_SIZE_SETTING.PHOTOS_HEADER");
break;
case 3:
$folder = "emotions";
$thumb_size = C("IMAGES_THUMB_SIZE_SETTING.EMOTIONS_PHOTO");
break;
}
$path = C("SYSTEM_IMAGES_FOLDERS")."images/".$folder;
if(!file_exists($path)){
mkdir($path);
chmod($path,755);
}
$file_arr = explode(".",$_FILES["file"]["name"]);
$file_name = $file_arr[0];
$sha1 = sha1(time().mt_rand());
$config = array();
$config["maxSize"] = 3145728;
$config["exts"] = array("jpg", "gif", "png", "jpeg","JPG","GIF","PNG","JPEG");
$config["rootPath"] = $path;
$config["savePath"] = "/";
$config["saveName"] = $sha1."-".$file_name;
$upload = new ThinkUpload($config);
$info = $upload->uploadOne($_FILES["file"]);
if(!$info) {
$data["ret_code"] = C("API_STATUS_CODE.FAILED");
$data["ret_msg"] = $upload->getError();
}else{
//文件存放路径
$url = $path.$info["savepath"].$info["savename"];
//生成缩略图
$all_img_url = $this->_multi_thumb_save($path,$info,$sha1,$thumb_size,$_FILES["file"]["name"]);
$data["ret_code"] = C("API_STATUS_CODE.SUCCESS");
$data["ret_msg"] = C("API_STATUS_CODE.SUCCESS_MSG");
$data["data"] = array(
"url" =>$url,
"thumb_url" =>$all_img_url
);
}
$this->ajaxReturn($data);
}
/**
* 批量生成不同尺寸缩略图
* @param $path 原始图片
* @param $info 图片上传后获得的object
* @param $sha1 sha1()后得到的值
* @param $size_arr 缩略尺寸数组
* @param $file_name 原始图片名称
* @return string 所有缩略图地址字串
*/
private function _multi_thumb_save($path,$info,$sha1,$size_arr,$file_name){
$all_img_url = "";
$img_url_arr = array();
//需要生成多个缩略图
if(is_array($size_arr)){
foreach($size_arr as $key =>$value){
$img_url_arr[$key] = $this->_thumb_save($path,$info,$sha1,$value,$file_name);
}
$all_img_url = json_encode($img_url_arr);
}else{
$all_img_url = $this->_thumb_save($path,$info,$sha1,$size_arr,$file_name);
}
return $all_img_url;
}
/**
* 批量生成不同尺寸缩略图
* @param $path 原始图片
* @param $info 图片上传后获得的object
* @param $sha1 sha1()后得到的值
* @param $thumb_size 缩略尺寸
* @param $file_name 原始图片名称
* @return string 所有缩略图地址字串
*/
private function _thumb_save($path,$info,$sha1,$thumb_size,$file_name){
$source = $path.$info["savepath"].$info["savename"];
$image = new ThinkImage();
$image->open($source);
$size = explode("*",$thumb_size);
$width = $size[0];
$height = $size[1];
//如果原始图片尺寸本来就小于缩略尺寸,那么不做压缩操作
if($image->width() <= $width && $image->height() <= $height){
$name = $source;
}else{
$name = $path.$info["savepath"].$sha1."-".$width."x".$height."-".$file_name;
$image->thumb($width, $height,ThinkImage::IMAGE_THUMB_SCALE);
$image->save($name);
}
return $name;
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 阿里云Linux新手入门一
- 下一篇: 阿里云aegis服务脚本
