当前位置:首页 > CMS教程 > Thinkphp > 列表

ThinkPHP5.0 图片上传生成缩略图实例代码说明

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-05 11:58:44 浏览: 评论:0 

这篇文章主要介绍了ThinkPHP5.0 图片上传生成缩略图实例代码说明,需要的朋友可以参考下。

很多朋友遇到这样一个问题,图片上传生成缩略图,很多人在本机(win)测试成功,上传到linux 服务器后错误。

我也遇到同样的问题,网上一查,有无数的人说是服务器临时文件目录权限问题。

几经思考后,发现并非如此。

其根本的原因是,保存到变量的信息是之前的,之后又move移动到了自己指定的目录下,同时临时文件已经不存在。所以再生成缩略图的时候,需要open的,文件地址应该是自己定义的目录+文件名。然而很多实例文档中,还是使用的move 之前的信息。

又加之在win服务器下,move后,指定目录已生成了文件,同时临时文件未被删除。所以能用move之前的信息生成缩略图。

希望不多的言语能帮助遇到同样问题的你。

下面在通过实例代码给大家介绍ThinkPHP5.0 图片上传生成缩略图的方法。

代码如下所示:

  1. <?php 
  2. namespace app\common\controller; 
  3. use app\common\model\Goods; 
  4. class Tools 
  5.  public static function upload_goods_img($whereName=""$width=""$height=""
  6.  { 
  7.  // 打开图片的相对路径 
  8.  $imgpath = config('img_path'); 
  9.  // 绝对路径 
  10.  $imgRootPath = config('imgRootPath'); 
  11.  $storeId = '自定义'
  12.  $merchantId = '自定义'
  13.  $old_filename = $storeId . $merchantId . time(); 
  14.  $filename = $storeId . $merchantId . time() . mt_rand(1000, 9999); 
  15.  $type = Goods::upload($whereName$old_filename); 
  16.  if($type)  
  17.  { 
  18.   $savepath = $imgRootPath . '/' . $whereName . '/' . $filename . '.' . $type
  19.   $thumbfile = $filename . '.' . $type
  20.   $thumbName = $imgpath . '/' . $whereName . '/' . $thumbfile
  21.   $image = \think\Image::open($imgpath . '/'$whereName .'/' . $old_filename . '.' . $type); 
  22.   $image->thumb($width$height, \think\Image::THUMB_FIXED)->save($thumbName); 
  23.   $data = [ 
  24.   'access_url' => $imgRootPath . '/' . $whereName . '/' . $filename . '.' . $type
  25.   'filename' => $thumbfile
  26.   ]; 
  27.   return $data
  28.  } 
  29.  }  

调用:

  1. class Goods 
  2.  public function upload_sku() 
  3.  { 
  4.  $whereName = 'goods/sku'
  5.  $width = 750; 
  6.  $height = 750; 
  7.  $data = Tools::upload_goods_img($whereName,$width$height); 
  8.  return returnJson(1, '上传成功'$data);; 
  9.  } 

PS:下面在看一段代码tp5中上传图片方法,并生成相应缩略图的方法

  1. //接收上传文件的name 
  2. $file = $this->_req->file("upload_head_image"); 
  3. //将上传的文件移动到public/uploads/user 
  4. $info = $file->validate(['size'=>5242880,'ext'=>'jpg,jpeg,png'])->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'user'); 
  5. if($info){ 
  6.  $pic = new \app\home\model\User(); 
  7.  $pic_url = $pic->thumbImage($file,$info); 
  8.  $user['portrait'] = 'uploads/user/'.$pic_url
  9.  //print_r($pic_url);exit(); 
  10.  } 
  11.  
  12. ///model中代码如下 
  13.  /** 
  14.  * [生成用户头像缩略图,180、50] 
  15.  * @param [type] $file [获取上传文件$_FILE] 
  16.  * @param [type] $pic [上传文件的路径] 
  17.  * @return [type] [返回处理后的文件路径] 
  18.  */ 
  19.  public function thumbImage($file,$pic){ 
  20.  $image = \think\Image::open($file); 
  21.  $getSaveName = str_replace('\\','/',$pic->getSaveName()); 
  22. $portrait_thumbnail_180'uploads/user/'.str_replace($pic->getFilename(),'180_'.$pic->getFilename(),$getSaveName); 
  23. $image->thumb(180,180,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_180,null,100,true); 
  24.  $portrait_thumbnail_80 = 'uploads/user/'.str_replace($pic->getFilename(),'80_'.$pic->getFilename(),$getSaveName); 
  25.  $image->thumb(80,80,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_80,null,100,true); 
  26.  $portrait_thumbnail_50 = 'uploads/user/'.str_replace($pic->getFilename(),'50_'.$pic->getFilename(),$getSaveName); 
  27.  $image->thumb(50,50,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_50,null,100,true); 
  28. if ($image) { 
  29.   return $getSaveName
  30.  } 
  31.  }

Tags: ThinkPHP5 0图片上传

分享到: