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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
jQuery+php简单实现全选删除的方法
Nov 28 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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
PHPMyAdmin 快速配置方法
2009/05/11 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
JS之小练习代码
2008/10/12 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
python如何让类支持比较运算
2018/03/20 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
实习老师离校感言
2014/02/03 职场文书
学生会离职感言
2014/02/11 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
元宵节主持词
2014/03/25 职场文书
机械专业求职信
2014/05/25 职场文书
民生工作实施方案
2014/05/31 职场文书
个园导游词
2015/02/04 职场文书
Pandas数据类型之category的用法
2021/06/28 Python