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 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
微信支付的开发流程详解
Sep 13 PHP
PHP实现倒计时功能
Nov 16 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(1)
2006/10/09 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
医科大学毕业生自荐信
2014/02/03 职场文书
社区交通安全实施方案
2014/03/22 职场文书
学校运动会霸气口号
2014/06/07 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
员工保密协议书
2014/09/27 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
交通事故案件代理词
2015/05/23 职场文书
读书笔记格式
2015/07/02 职场文书