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 调用远程url的六种方法小结
Nov 02 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
详解thinkphp中的volist标签
Jan 15 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 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获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
Python的缺点和劣势分析
2019/11/19 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
用python读取xlsx文件
2020/12/17 Python
用python计算文件的MD5值
2020/12/23 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
刚毕业大学生自荐信范文
2014/02/20 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
五年级小学生评语
2014/12/26 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫