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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
PHP单例模式简单用法示例
Jun 23 PHP
ThinkPHP实现登录退出功能
Jun 29 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
PHP预定义接口――Iterator用法示例
Jun 05 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
numpy.random模块用法总结
2019/05/27 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
金属材料工程个人求职的自我评价
2013/12/04 职场文书
高中英语教学反思
2014/02/04 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
三好学生竞选稿范文
2019/08/21 职场文书