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.ini 中文版
Oct 28 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
Oct 03 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
杏林同学录(六)
2006/10/09 PHP
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python实现数独算法实例
2015/06/09 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
详解python算法之冒泡排序
2019/03/05 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
浅谈Python3中print函数的换行
2020/08/05 Python
python 如何上传包到pypi
2020/12/24 Python
python实现马丁策略的实例详解
2021/01/15 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
交通事故检查书范文
2014/01/30 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
档案工作个人总结
2015/03/03 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
2019思想汇报范文
2019/05/21 职场文书