HTML5 图片本地压缩上传插件「localResizeIMG」
移动应用中用户往往需要上传照片,但是用户上传的照片尺寸通常很大,而手机的流量却很有限,所以在上传前对图像进行压缩是很有必要的。
原生应用可以直接对文件进行处理,网页应用就没有这个优势了。不过 canvas 的出现给出一条新的思路,将图像按照比例绘制到画布上,最后将绘制完成的画布以 base64 编码方式发送到服务端,再由服务端进行解析还原成图片。
由于进行处理的过程较为复杂,于是 localResizeIMG 就孕育而生了,它简化了前端压缩图片的步骤,减轻了前端工程师的工作负担。Github:https://github.com/think2011/localResizeIMG
localResizeIMG 插件的优势:
- 经过大量测试,特别适合在移动设备上使用
- 会根据对应设备自动载入JS文件,节省宽带
- 基于原生 JavaScript 编写,支持 AMD 规范
localResizeIMG 的获取方式:
- GitHub:https://github.com/think2011/localResizeIMG
- NPM命令:npm install lrz
- BOWER:bower install lrz
======================前端代码=========================
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>localResizeIMG</title>
<!--引入JQuery 用于异步上传图片-->
<script type="text/javascript" src="dist/jquery-3.1.1.min.js"></script>
<!--引入 lrz 插件 用于压缩图片-->
<script type="text/javascript" src="dist/lrz.bundle.js"></script>
</head>
<body>
<input type="file" accept="image/jpeg" capture="camera">
</body>
<script>
$("input[type=file]").change(function () {
/* 压缩图片 */
lrz(this.files[0], {
width: 300 //设置压缩参数
}).then(function (rst) {
/* 处理成功后执行 */
rst.formData.append('base64img', rst.base64); // 添加额外参数
$.ajax({
url: "upload.php",
type: "POST",
data: rst.formData,
processData: false,
contentType: false,
success: function (data) {
$("<img />").attr("src", data).appendTo("body");
}
});
}).catch(function (err) {
/* 处理失败后执行 */
}).always(function () {
/* 必然执行 */
})
})
</script>
</html>
引入插件:<script type="text/javascript" src="dist/lrz.bundle.js"></script>
绑定事件:$("input[type=file]").change(function () {/* 压缩上传处理 */});
压缩图片:lrz(file, [options]);
file 通过 input:file 得到的文件,或者直接传入图片路径
[options] 这个参数允许忽略
width {Number} 图片最大不超过的宽度,默认为原图宽度,高度不设定时会适应宽度
height {Number} 图片的最大高度,默认为原图高度
quality {Number} 图片压缩质量,取值 0 - 1,默认为 0.7
fieldName {String} 后端接收的字段名,默认:file
返回结果:promise 对象
then(rst) 处理成功后执行
rst.formData 后端可处理的数据
rst.file 压缩后的file对象,如果压缩率太低,将会是原始file对象
rst.fileLen 生成后的图片的大小,后端可以通过此值来校验是否传输完整
rst.base64 生成后的图片base64,后端可以处理此字符串为图片,也可以直接用于 img.src = base64
rst.base64Len 生成后的base64的大小,后端可以通过此值来校验是否传输完整
rst.origin 也就是原始的file对象,里面存放了一些原始文件的信息,例如大小、日期等
异步上传:processData 和 contentType 必须设为 false,否则服务端不会响应
======================后端代码=========================
<?php
$base64_image_content = $_POST['base64img'];
$output_directory = './image'; //设置图片存放路径 /* 检查并创建图片存放目录 */
if (!file_exists($output_directory)) {
mkdir($output_directory, 0777);
} /* 根据base64编码获取图片类型 */
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
$image_type = $result[2]; //data:image/jpeg;base64,
$output_file = $output_directory . '/' . md5(time()) . '.' . $image_type;
} /* 将base64编码转换为图片编码写入文件 */
$image_binary = base64_decode(str_replace($result[1], '', $base64_image_content));
if (file_put_contents($output_file, $image_binary)) {
echo $output_file; //写入成功输出图片路径
}
HTML5 图片本地压缩上传插件「localResizeIMG」的更多相关文章
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- CANVAS运用-对图片的压缩上传(仅针对移动浏览器)
最近在移动端设计头像上传功能时,原本是以<input type="file">直接通过formData上传,然而实际使用情况是:对于过大的图片(高像素手机所拍摄的照片等 ...
- uniapp小程序图片前端压缩上传
目录 1,前言 2,实现代码 1,前言 这次项目中做了一个图片上传,要求是大于2MB的就压缩成2MB一下的再上传,我这边利用了uniapp的文件接口,使用canvas做了一个压缩上传的功能,目前已上线 ...
- 前台图片Canvas压缩上传小结
需求来源:之前有个提交审核表单的业务,表单中含有大量附件图片,大约有20多张吧,为了省事,采用的同步上传,一次需要上传很多照片,本来单张图片限制为200KB,这样子总图片大小约为5MB左右,想想也可以 ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
- zyUpload界面绝佳、体验超棒的HTML5上传插件
一.为毛线开发它 经过了两个星期做出了两个基于HTML5的多文件上传插件,之前在做网站的时候用到文件上传这一个功能,但是大多说都是基于Flash的,正好最近HTML5很火,而且渐渐壮大起来,感觉搞前端 ...
- Js 之移动端图片上传插件mbUploadify
一.下载 https://pan.baidu.com/s/1NEL4tkHoK4ydqdMi_hgWcw 提取码:vx7e 二.Demo示例 <div class="weui_uplo ...
- 支持断点续传的文件上传插件——Huploadify-V2.0来了
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
- 51nod 最小周长
1283 最小周长 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个矩形的面积为S,已知该矩形的边长都是整数,求所有 ...
- weui dialog
切记:weui dialog 的样式是在weui.css,而不是在weui.min.css HTML: <!DOCTYPE html> <html> <head> ...
- 第一次源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- .net自带的IOC容器MEF使用
IOC能做什么 IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序. 控制反转: 将控制权移交给第三方容器 new 操作 依赖注入: 在程序 ...
- MySQL、MongoDB、Redis数据库Docker镜像制作
MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...
- a new Poster
- 利用django创建一个投票网站(六)
建你的第一个 Django 项目, 第六部分 这一篇从第五部分(zh)结尾的地方继续讲起.再上一节中我们为网络投票程序编写了测试,而现在我们要为它加上样式和图片. 除了服务端生成的 HTML 以外,网 ...