Laravel5.x 封装的上传图片类
图片缩放需要用conposer安装 ImageManagerStatic类
可参考下面的地址安装:
https://www.jb51.net/article/128159.htm
控制器里:
控制器里调用上传图片类的方法
//上传单张图片 前台html表单里传name=goods_img
//处理上传图片并缩成两张缩略图和一张原图片
if($file = $request->file('goods_img')){
//处理上传图片并缩成两张缩略图和一张原图片
$img_data=$this->thumb_img($file);
$pic_path = [
'origin_img_url'=>$pic_data['goods_img_origin'], //原图片(必存)
'image_url'=>$pic_data['goods_img'], //商品相册图片(必存 大图750*750)
'thumb_url'=>$pic_data['goods_thumb'], //缩略图图片(缩略图500*500)
];
//存入表里的操作...
}
// 多张图片上传相册
//上传多张图片,以数组的形式上传,前台html表单里传name=picture[]
//循环调用单张图上传类
if($file = $request->file('picture')){
if(is_array($file)){
foreach($file as $v){
if(empty($v)){
continue;
}
//处理上传图片并缩成三张缩略图和一张原图片
$pic_path=$this->thumb_img($v,0,1);
//整理图片路径,可以做存入表里的操作
$pic_path = [
'origin_img_url'=>$pic_data['goods_img_origin'], //原图片(必存)
'image_url'=>$pic_data['goods_img'], //商品相册图片(必存 大图750*750)
'thumb_url'=>$pic_data['goods_thumb'], //缩略图图片(缩略图500*500)
'sm_thumb_url'=>$pic_data['sm_thumb_path'], //缩略图图片(缩略图100*100)
];
//存入表里的操作...
}
}
}
控制器里调用删除图片类的方法
// (图片在public目录里)
$this->del_img('/uplodes/2019-03-09/20190309213658.png');
Controller.php 基础控制器里封装上传图片类
use Intervention\Image\ImageManagerStatic as Image;
/**
* @desc 单图片文件上传 [单张图片操作]
* @param $files
* @return string
* @return size 文件最大限制(1M)
* 图片上位置在public/picture_data/下
*/
public function uploadFile($files,$size=1048576)
{
if(empty($files)){
return '/images/photos/loggeduser.png';
}
if($files->getClientSize()>$size){
return false;
}
$ext=$files->extension();
$img_array=['gif','jpg','jpeg','bmp','png'];
if(!in_array($ext,$img_array)){
return false;
}
$basePath = 'picture_data/'.date('Y-m-d',time());//文件上传的目录
$filename =date('YmdHis',time()).uniqid().".".$files->extension();
if(!file_exists($basePath)){
mkdir($basePath,0777,true);
}
move_uploaded_file($files->path(),$basePath. '/'.$filename);
return "/".$basePath. '/'.$filename;
}
/*
* 删除图片 [单张图片操作]
* $img_path 图片的路由 例: /uplodes/2019-03-09/20190309213658.png (图片在public目录里)
*/
public function del_img($img_path){
if(empty($img_path) || !is_string($img_path)){
return false;
}
$img_path='.'.$img_path;
if(file_exists($img_path)){
$rs=@unlink($img_path);
// if(!$rs) returnMsg(1,'删除原图片失败.');
return true;
}
else{
return false;
}
}
//[单张图片操作] 处理上传图片并缩成两张缩略图
/**
* @param $file 上传图片的临时文件
* @param int $sm 是否要生成最小的100*100的缩略图 0=生成 , 1=生成
* @return array 返回所有上传后生成的缩略图和原图片的地址
* @return size 文件最大限制(1M)
* @return type 1指定宽高、2指定宽(保持原宽高比例) (宽高会从conmon.php配置文件里取宽高)
* 图片上位置在public/picture_data/下
*/
public function thumb_img($file,$type=1,$sm=0,$size=1048576){
//商品图片(大图750*750px)
$goods_img_path = $this->uploadPicture($file,config('common.image_size.big_thumb_width'),$type==1?config('common.image_size.big_thumb_height'):null);
//商品图片(大图500*500px)
$goods_thumb_path = $this->uploadPicture($file,config('common.image_size.mid_thumb_width'),$type==1?config('common.image_size.mid_thumb_height'):null);
if(!empty($sm)){
//商品图片(大图100*100px)
$sm_thumb_path = $this->uploadPicture($file,config('common.image_size.sm_thumb_width'),$type==1?config('common.image_size.sm_thumb_height'):null);
}
//原图地址
$goods_img_origin_path=$this->uploadFile($file,$size);
$img_data = [
'goods_img_origin'=>!empty($goods_img_origin_path) ? $goods_img_origin_path: '' ,
'goods_img'=>!empty($goods_img_path)?$goods_img_path:"",
'goods_thumb'=>!empty($goods_thumb_path)?$goods_thumb_path:'',
];
if(isset($sm_thumb_path) && !empty($sm_thumb_path)){
$img_data['sm_thumb_path']= !empty($sm_thumb_path) ? $sm_thumb_path: "";
}
return $img_data;
}
/*
* 上传指定尺寸图片方法 [单张图片操作]
* 请求参数
* picture file()接收到的临时图片路径源路径
* path 路径 $basePath = 'picture_data/'.date('Y-m-d',time());//文件上传的目录
* width 宽度(像素)
* height 高度(像素) 如果不传是就宽指定的宽等比例缩放高度
* filename 文件名(不指定则自动生成)
* size 文件最大限制(1M)
* 图片上位置在public/picture_data/下
*/
function uploadPicture($picture,$width=200,$height=null,$path='',$filename=null,$size=1048576){
if(empty($path)){
$path='picture_data/'.date('Y-m-d',time());
}
if($picture->getClientSize()>$size){
return false;
}
$ext=$picture->extension();
$img_array=['gif','jpg','jpeg','bmp','png'];
if(!in_array($ext,$img_array)){
return false;
}
//$this->validate($picture, [
//'avatar' => 'dimensions:min_width=250,min_height=500'
//]);
//目录不存在则创建
if(!is_dir($path)){
mkdir($path, 0777);
}
if(!$filename){
$filename = uniqid().'.'.$picture->getClientOriginalExtension();
}else{
$filename .= '.'.$picture->getClientOriginalExtension();
}
if(empty($height)){
$img = Image::make($picture)->resize($width,null,function($constraint){// 调整图像的宽,并约束宽高比(高自动)
$constraint->aspectRatio();
});
}else{
$img = Image::make($picture)->resize($width, $height);
}
$res = $img->save($path.'/'.$filename);
//var_dump($res);
return '/'.$path.'/'.$filename;
}
Laravel5.x 封装的上传图片类的更多相关文章
- .NET3.5中JSON用法以及封装JsonUtils工具类
.NET3.5中JSON用法以及封装JsonUtils工具类 我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- 使用libzplay库封装一个音频类
装载请说明原地址,谢谢~~ 前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- [iOS]封装单例类
[iOS]封装单例类 今天在学习iOS的SQLite开发,发现在需要使用SQLite的每个视图中,都需要对数据库进行打开或关闭,觉得挺麻烦的:于是在想能否写个单例类对这些操作进行封(因以前一直在使用D ...
- 1.使用C++封装一个链表类LinkList
使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸********** ...
随机推荐
- 【Linux】GDB程序调试
一.GDB简介 GDB是GNU发布的一款功能强大的程序调试工具.GDB主要完成下面三个方面的功能: 启动被调试程序. 让被调试的程序在指定的位置停住. 当程序被停住时,可以检查程序状态(如变量值) 二 ...
- 跨平台移动开发_PhoneGap 使用Geolocation基于所在地理位置坐标调用百度地图API
使用Geolocation基于所在地理位置坐标调用百度地图API 效果图 示例代码 <!DOCTYPE html> <html> <head> <title& ...
- JS高级程序设计第三版——基本概念
前言:任何语言的核心都必然会描述这门语言最基本的工作原理.而描述的内容通常都要设计这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. 语法: 1. 区分大小写: 2. 标 ...
- mac 上配置 maven
1. 将maven压缩包解压至/Users/suqiuhui/Applications目录下的新建文件夹dev下 2. 打开终端(系统根目录,~/下) 3. 如果没有 .bash_profile 文件 ...
- Appium Android 元素定位方法 原生+H5
APPIUM Android 定位方式 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement eleme ...
- OLAP和数据挖掘的区别
总结来说: 数据仓库提供了一个分析的数据源 数据挖掘能分析出未知的信息,提出假设 OLAP能通过分析,验证假设 从技术角度看,商务智能的过程是企业的决策人员以企业中的数据仓库为基础,经由数据挖掘工具. ...
- php导出cvs xls xlsx
有两种方法,一种是更改输出头部,一种是使用phpexcel类,很显然前者更方便,下面给出一个demo方法导出cvs/** * 导出日志 */public function excel() { setl ...
- expdp指定时间戳导出防止数据不一致
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’ ...
- 在VMware上安装ubuntu——网络类型
安装虚拟机时,向导提示选择网络类型: 当使用仅主机模式网络时,虚拟机和物理机不能互相访问共享.
- linux下vi的一些简单的操作
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...