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 相关文章推荐
xajax写的留言本
Nov 25 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
PHP生成唯一订单号
Jul 05 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 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 文件扩展名 获取函数
2009/06/03 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php商品对比功能代码分享
2015/09/24 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
从零学Python之入门(三)序列
2014/05/25 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python实现猜数字小游戏
2020/03/24 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
Python类的继承用法示例
2019/01/31 Python
python画双y轴图像的示例代码
2019/07/07 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
保卫钓鱼岛口号
2014/06/20 职场文书
世界红十字日活动总结
2015/02/10 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python