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数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
Jul 02 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 PHP
实例化php类时传参的方法分析
Jun 05 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
详解Laravel制作API接口
May 31 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简单防盗链实现方法
2015/07/29 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python怎么判断素数
2020/07/01 Python
python openpyxl模块的使用详解
2021/02/25 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
乔迁宴答谢词
2014/01/21 职场文书
故宫英文导游词
2015/01/31 职场文书
《确定位置》教学反思
2016/02/18 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python