H5图片上传、压缩
1.注册input file标签的onchange事件;
2.检查图片格式;
3.检查图片大小;
4.压缩图片
5.上传图片至服务器;
前端代码:
document.getElementById('img-file').addEventListener('change', function (event){
var that=this;
var file = that.files[0];
if (file) {
var rFilter = /^(image\/jpeg|image\/png|image\/jpg)$/i; // 检查图片格式
if (!rFilter.test(file.type)) {
alert("请选择jpeg、png、jpg格式的图片");
return;
}
}
var fileSize = Math.round(that.files[0].size/1024/1024) ; //以M为单位
if(fileSize>3){
alert("请上传小于3M的图片");
return;
} //压缩后上传
compress(event.target.files[0],fileSize,function(base64_data){
$.ajax({
type:'post',
url:ApiUrl+'/index.php?act=sns_album&op=base64_upload',
data:{key:key,imgBase64:base64_data},
dataType:'json',
success: function(result){
callBack(result);
}
});
}); },true); function compress(res,fileSize,callBack) {
//res代表上传的图片base64位,fileSize大小图片的大小
var img = new Image();
var maxW = 800; //设置最大宽度
img.onload = function () {
var cvs = document.createElement('canvas'),
ctx = cvs.getContext( '2d');
if(img.width > maxW) {
img.height *= maxW / img.width;
img.width = maxW;
}
cvs.width = img.width;
cvs.height = img.height;
ctx.clearRect(0, 0, cvs.width, cvs.height);
ctx.drawImage(img, 0, 0, img.width, img.height);
var compressRate = getCompressRate(1,fileSize);
//*将image对象转成base64*
var dataUrl = cvs.toDataURL('image/jpeg', compressRate);
if(typeof callBack=='function') callBack(dataUrl);
}
img.src = res;
}
服务器:
public function base64_uploadOp(){
header('Content-type:text/html;charset=utf-8');
$base64_image_content = $_POST['imgBase64'];
//匹配出图片的格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
$type = $result[2];
$member_id = $this->member_info['member_id']; $date = date("Ym");
$new_file =BASE_UPLOAD_PATH.DS."chat/".$date.DS;
if (!file_exists($new_file)) {
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($new_file, 0700);
}
$file_name=time();
$new_file = $new_file . $file_name . ".{$type}";
if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))) {
$data = array();
$data['file_id'] = $file_name;
$data['file_name'] = $new_file;
$data['file_url'] =UPLOAD_SITE_URL.DS."chat/".$date.DS.$file_name . ".{$type}";
return json_encode($data);
} else {
exit("文件保存失败");
}
}else{
exit("文件转换失败");
}
}
H5图片上传、压缩的更多相关文章
- vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload), ...
- 浅析H5图片上传
概述 最近需求上需要实现图片上传的功能,简单记录下实现过程.目前实现的功能比较简单,主要有以下几点: 图片预览 图片删除 拖拽上传 压缩上传 移动端实现方案:使用File API 主要使用到 File ...
- H5 图片上传
1.h5 图片异步上传 (1) 异步上传input触发onchange事件的时候,就把图片上传至服务器.后台可能会返回图片的链接等信息,前台可以把图片信息展示给用户看. (2) 另一种情况可能需要前台 ...
- vue移动端图片上传压缩
上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...
- h5图片上传预览与拖拽上传
图片上传: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- Java图片上传压缩处理
所需要的jar包在:\jdk1.7.0_25\jre\lib\rt.jar里面 package util; import java.awt.Image; import java.awt.image.B ...
- H5图片上传插件
基于zepto,支持多文件上传,进度和图片预览,用于手机端. (function ($) { $.extend($, { fileUpload: function (options) { var pa ...
- h5图片上传预览
项目中常用到文件上传预览功能,整理一下:如果不想使用 type="file" 的默认样式,可以让其覆盖在一个按钮样式上边,设其透明度为0,或者使用Label关联 html < ...
- h5图片上传简易版(FileReader+FormData+ajax)
一.选择图片(input的file类型) <input type="file" id="inputImg"> 1. input的file类型会渲染为 ...
随机推荐
- [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)
洛谷传送门 LOJ传送门 和太空飞行计划问题一样,这依然是一道最大权闭合图问题 “骑士共存问题”是“方格取数问题”的弱化版,本题解不再赘述“骑士共存问题”的做法 分析题目,如果我们能把所有方格的数都给 ...
- Problem 13
Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...
- Python 之 格式化文件
# 结构化文件存储- xml, json- 为了解决不同设备之间的信息交换 ## XML文件(可扩展标记语言) - 标记语言:语言中使用尖括号括起来的文本字符串标记 - 可扩展:用户可以自己定义需要的 ...
- 00072_System类
1.概念 (1)System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作: (2)System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象: (3)Syste ...
- 【Codeforces Round #493 (Div. 2) B】Cutting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然只有在前i个位置奇数偶数出现次数都相同的地方才能切. (且不管前面怎么切,这里都能切的. 那么就相当于有n个物品,每个物品的代价 ...
- 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你求出1..n中和m互质的位置i. 让你输出∑ai 这个ai可以oeis一波. 发现是ai = i(i+1) 1..n中和m互质的 ...
- ❝ Windows系统的FTP上传下载脚本 ❞
运行环境:windows 脚本功能:从目标系统下载数据库备份文件*.dmp 执行方法:windows任务计划定时调用文件ftp.bat 文件1:ftp.bat echo 开始备份日期: >> ...
- 模仿学习小游戏外星人入侵-Python学习,体会“函数”编程
游戏类如下: # !/usr/bin/python # -*- coding:utf-8 -*- """ Author :ZFH File :alien.py Softw ...
- 如何打开WCF测试客户端
- 页面安装Jre
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="0" height ...