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


Posted in PHP onJune 20, 2018

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

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

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

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

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

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

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

代码如下所示:

<?php
namespace app\common\controller;
use app\common\model\Goods;
class Tools
{
 public static function upload_goods_img($whereName="", $width="", $height="")
 {
 // 打开图片的相对路径
 $imgpath = config('img_path');
 // 绝对路径
 $imgRootPath = config('imgRootPath');
 $storeId = '自定义';
 $merchantId = '自定义';
 $old_filename = $storeId . $merchantId . time();
 $filename = $storeId . $merchantId . time() . mt_rand(1000, 9999);
 $type = Goods::upload($whereName, $old_filename);
 if($type) 
 {
  $savepath = $imgRootPath . '/' . $whereName . '/' . $filename . '.' . $type;
  $thumbfile = $filename . '.' . $type;
  $thumbName = $imgpath . '/' . $whereName . '/' . $thumbfile;
  $image = \think\Image::open($imgpath . '/'. $whereName .'/' . $old_filename . '.' . $type);
  $image->thumb($width, $height, \think\Image::THUMB_FIXED)->save($thumbName);
  $data = [
  'access_url' => $imgRootPath . '/' . $whereName . '/' . $filename . '.' . $type,
  'filename' => $thumbfile,
  ];
  return $data;
 }
 } 
}

调用:

class Goods
{
 public function upload_sku()
 {
 $whereName = 'goods/sku';
 $width = 750;
 $height = 750;
 $data = Tools::upload_goods_img($whereName,$width, $height);
 return returnJson(1, '上传成功', $data);;
 }
}

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

//接收上传文件的name
$file = $this->_req->file("upload_head_image");
//将上传的文件移动到public/uploads/user
$info = $file->validate(['size'=>5242880,'ext'=>'jpg,jpeg,png'])->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'user');
if($info){
 $pic = new \app\home\model\User();
 $pic_url = $pic->thumbImage($file,$info);
 $user['portrait'] = 'uploads/user/'.$pic_url;
 //print_r($pic_url);exit();
 }

///model中代码如下
 /**
 * [生成用户头像缩略图,180、50]
 * @param [type] $file [获取上传文件$_FILE]
 * @param [type] $pic [上传文件的路径]
 * @return [type] [返回处理后的文件路径]
 */
 public function thumbImage($file,$pic){
 $image = \think\Image::open($file);
 $getSaveName = str_replace('\\','/',$pic->getSaveName());
$portrait_thumbnail_180= 'uploads/user/'.str_replace($pic->getFilename(),'180_'.$pic->getFilename(),$getSaveName);
$image->thumb(180,180,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_180,null,100,true);
 $portrait_thumbnail_80 = 'uploads/user/'.str_replace($pic->getFilename(),'80_'.$pic->getFilename(),$getSaveName);
 $image->thumb(80,80,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_80,null,100,true);
 $portrait_thumbnail_50 = 'uploads/user/'.str_replace($pic->getFilename(),'50_'.$pic->getFilename(),$getSaveName);
 $image->thumb(50,50,\think\Image::THUMB_CENTER)->save(ROOT_PATH . 'public' . DS . $portrait_thumbnail_50,null,100,true);
if ($image) {
  return $getSaveName;
 }
 }

总结

以上所述是小编给大家介绍的ThinkPHP5.0 图片上传生成缩略图实例代码说明,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
针对初学PHP者的疑难问答(1)
Oct 09 PHP
php Xdebug的安装与使用详解
Jun 20 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
php使用正则验证中文
Apr 06 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
PHP微信红包生成代码分享
Oct 06 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
Laravel框架处理用户的请求操作详解
Dec 20 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
如何判断微信付款码和支付宝付款码
Apr 01 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 #PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 #PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 #PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 #PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 #PHP
You might like
PHP 读取文件的正确方法
2009/04/29 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
SVG实现时钟效果
2018/07/17 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
js实现电灯开关效果
2021/01/19 Javascript
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
python实现简单多人聊天室
2018/12/11 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
Python分类测试代码实例汇总
2020/07/23 Python
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
工厂门卫岗位职责范本
2014/04/04 职场文书
二年级评语大全
2014/04/23 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
教师工作表现自我评价
2015/03/05 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
成事在人观后感
2015/06/16 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL