牛骨文教育服务平台(让学习变的简单)
博文笔记

thinkphp上传图片及生成缩略图

创建时间:2016-09-13 投稿人: 浏览次数:3763

一、上传图片的HTML代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>upload</title>
	</head>
	<body>
		<img src="{$Think.const.IMG_URL}Uploads/{$name}"  onerror="this.src="{$Think.const.IMG_URL}Uploads/default.jpg""/>
   
	<form method="post" enctype="multipart/form-data">
		<input type="file" name="image" accept="image/jpg,image/jpeg,image/gif,image/png"/><br/>
		<input type="submit" value="upload"/>
	</form>
	</body>
</html>


一定要注意的是,form表单的属性一定要写上,缺一不可。

<span style="font-size:18px;color:#FF0000;">method="post" enctype="multipart/form-data"</span>


二、上传图片后再生成缩略图保存


出现如上所示问题,是因为根目录不存在,$upload->rootPath的默认根目录为当前项目下的Uploads文件夹,即:"./Uploads/";

可以手动创建,也可以将根目录修改为已经存在的目录。


if (!empty($_FILES)) {
        $upload = new ThinkUpload();// 实例化上传类
        $upload->maxSize = 2048000;             //上传文件最大大小
        $upload->allowExts = array("jpg","jpeg","gif","png");//允许上传文件类型
        $upload->rootPath = "./Application/Home/Public/";  //文件保存根目录,可以自定义
        $upload->savePath = "Uploads/";                //文件保存目录
        $upload->replace = "true";                      //可以替换相同名称的文件
        $upload->saveName = "image";
        $file = $upload->upload()["image"];
        if(!$file){
            $this->error($upload->getError());//获取失败信息
        } else {
            $img = "./Application/Home/Public/".$file["savepath"].$file["savename"];//获取文件上传目录
            $image = new ThinkImage(); 
            $image->open($img);    //打开上传图片
            $image->thumb(102, 142,ThinkImage::IMAGE_THUMB_FIXED)->save($desitination."thumb.jpg");//生成缩略图
        }
}



三、生成缩略图之后再保存缩略图

        图片上传过程中,直接对上传文件暂存目录下的图片进行处理,生成缩略图并保存,则原图片就不再保存,减少内存的消耗。

public function img(){
        $name = $_FILES["image"]["tmp_name"];//从上传文件暂存目录下读取文件
        $image = new ThinkImage(); 
        $image->open($name);//生成缩略图
        $image->thumb(102, 142,ThinkImage::IMAGE_THUMB_FIXED)->save("./image.jpg");
   }

并且支持多种类型的缩略图生成,设置包括ThinkImage的下列常量或者对应的数字:
  1. IMAGE_THUMB_SCALE = 1 ; //等比例缩放类型
  2. IMAGE_THUMB_FILLED = 2 ; //缩放后填充类型
  3. IMAGE_THUMB_CENTER = 3 ; //居中裁剪类型
  4. IMAGE_THUMB_NORTHWEST = 4 ; //左上角裁剪类型
  5. IMAGE_THUMB_SOUTHEAST = 5 ; //右下角裁剪类型
  6. IMAGE_THUMB_FIXED = 6 ; //固定尺寸缩放类型

可以参考thinkphp学习手册——图像处理:

http://document.thinkphp.cn/manual_3_2.html#image
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。