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 Class 文章
Apr 04 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
thinkPHP5框架实现基于ajax的分页功能示例
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实现链结人气统计
2006/10/09 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
Angular实现svg和png图片下载实现
2019/05/05 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
Python subprocess模块学习总结
2014/03/13 Python
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python使用多进程的实例详解
2018/09/19 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
python 简单的调用有道翻译
2020/11/25 Python
python中使用np.delete()的实例方法
2021/02/01 Python
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
应用心理学个人的求职信
2013/12/08 职场文书
前台文员我鉴定
2014/01/12 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
志愿者活动总结报告
2014/06/27 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers