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导出oracle库的php代码
Apr 20 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
详解PHP中的null合并运算符
Dec 30 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
PHP 类与构造函数解析
Feb 06 PHP
php实时倒计时功能实现方法详解
Feb 27 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
Yii2处理密码加密及验证的方法
May 12 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多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
js有关元素内容操作小结
2011/12/20 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
初步探究Python程序的执行原理
2015/04/11 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
Python何时应该使用Lambda函数
2019/07/02 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
解决python flask中config配置管理的问题
2019/07/26 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
捐书寄语赠言
2014/01/18 职场文书
项目经理岗位职责
2015/01/31 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
python读取mnist数据集方法案例详解
2021/09/04 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS