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代码简化
Feb 08 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
PHP中常见的缓存技术实例分析
Sep 23 PHP
PHP中FTP相关函数小结
Jul 15 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
PHP代码加密的方法总结
Mar 13 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
php经典算法集锦
2015/11/14 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
python中pycurl库的用法实例
2014/09/30 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python中常见的数据类型小结
2015/08/29 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
详解python3中tkinter知识点
2018/06/21 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
通俗讲解python 装饰器
2020/09/07 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
C语言50道问题
2014/10/23 面试题
介绍一下EJB的体系结构
2012/08/01 面试题
致铅球运动员广播稿精选
2014/01/12 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
代理人委托书
2014/08/01 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书