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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php cookies中删除的一般赋值方法
May 07 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
php中的strpos使用示例
Feb 27 PHP
PHP 读取和编写 XML
Nov 19 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php读取csc文件并输出
May 21 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
简单实现php上传文件功能
Sep 21 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
PHP 图片处理
2020/09/16 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
javascript运动详解
2015/07/06 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
消防应急演练方案
2014/02/12 职场文书
市场营销调查计划书
2014/05/02 职场文书
应届大专生求职信
2014/06/26 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
铁人观后感
2015/06/16 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA