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抓即时股票信息
Oct 09 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
微信API接口大全
Apr 15 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
php for 循环使用的简单实例
Jun 02 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 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/07 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
Python爬虫实现百度图片自动下载
2018/02/04 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python事件驱动event实现详解
2018/11/21 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
如何在sublime编辑器中安装python
2020/05/20 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
工地资料员岗位职责
2013/12/31 职场文书
网络编辑岗位职责
2014/03/18 职场文书
教师个人自我评价范文
2014/04/13 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
python之基数排序的实现
2021/07/26 Python