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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
- [LeetCode] Subsets II 子集合之二
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- [LeetCode] Partition List 划分链表
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...
- ubuntu系统虚拟机下共享文件夹
一般情况 1.安装: sudo apt-get install open-vm-dkms 2.挂载: sudo mount -t vmhgfs .host:/ /mnt/hgfs 用以上命令安 ...
- C#笔记
关键字: 1.internal 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 注意事项: 1.解决c#代码引用c/c++代码出现的unsafe code错误警告提示 Unsaf ...
- android GPS定位源码 地图显示位置源码 有用到的小伙伴自提取
package com.jasgroup.cn.amhdeam; import java.io.IOException; import java.util.Iterator; import andro ...
- Oracle查询时间字段并排序
select * from geimstatus_history twhere to_date(t.data_time,'YYYY-mm-dd') = to_date(sysdate,'YYYY-mm ...
- pureftp在centos下与MySQL搭配使用
概述 pure-ftpd是linux下的一个ftp服务端,据说安全性较高.我在centos6下用yum安装pure-ftpd,并配置了通过MySQL进行用户的增删改查,以及对应到apache的web目 ...