分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片
2016-08-05更新:
下方的代码是比较OLD的了,是通过js进行图片的剪切 旋转 再生成,效率较低。
后来又整合了一个利用native.js本地接口的压缩代码 ,链接在这
。页面中有详细的说明,需要的童鞋们可以参考以下。
源码地址 https://github.com/phillyx/MUIDemos/tree/dce9283ea3e0726ccff0e8ef5b25fa028025ac69
代码整合了
1.多串君
- 伟子
两个人的demo,
其中resize原来的filereader在5 中更改为plus.io.FileReader()方不报错。
如有错误,请不吝批评指正。
更新日志:
2015-05-09 1020450921@qq.com
1.修复了ios下无法获取图片宽高的问题:
ios下不在img.onload中是获取不到文件对象的。
新增了最大宽度(高度)的判别,按比例压缩。
具体代码如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
- <title></title>
- <link href="http://ask.dcloud.net.cn/../../../css/mui.min.css" rel="stylesheet" />
- <style type="text/css">
- body {
- background-color: #efeff4;
- }
- .mui-content {} .mui-content a {
- color: #8F8F94;
- }
- .mui-content a.active {
- color: #007aff;
- }
- .mui-title {
- font-family: simhei;
- }
- .btn_1 {
- position: absolute;
- bottom: 100px;
- left: 10px;
- right: 10px;
- }
- .btn_2 {
- position: absolute;
- bottom: 20px;
- left: 10px;
- right: 10px;
- }
- .mui-btn-block {
- width: 90%;
- margin: 0 auto;
- }
- body {
- overflow: hidden;
- }
- .showimg {
- margin: 20px 10px auto 10px;
- text-align: center;
- }
- </style>
- </head>
- <body>
- <header class="mui-bar mui-bar-nav">
- <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
- <h1 class="mui-title">上传身份证照片</h1>
- <a class="mui-pull-right mui-icon mui-icon-upload" onclick="imgupgrade()"></a>
- </header>
- <!--
- 作者:1020450921@qq.com
- 时间:2015-04-24
- 描述:参考 http://ask.dcloud.net.cn/question/2089
- -->
- <div class="mui-content">
- <div class="showimg">
- </div>
- <button type="button" class="mui-btn mui-btn-primary mui-btn-block btn_1" onclick="galleryImgs()">从相册中选择图片</button>
- <br>
- <button type="button" class="mui-btn mui-btn-success mui-btn-block btn_2" onclick="cameraimages()">拍照</button>
- </div>
- </body>
- <script src="../../../js/mui.min.js"></script>
- <script src="../../../js/binaryajax.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../../js/exif.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../../js/canvasResize.js" type="text/javascript" charset="utf-8"></script>
- <script type="text/javascript">
- mui.init();
- mui.plusReady(function() {})
- //上传单张图片
- function galleryImg() {
- //每次拍摄或选择图片前清空数组对象
- f1.splice(0, f1.length);
- document.getElementsByClassName("showimg")[0].innerHTML = null;
- // 从相册中选择图片
- mui.toast("从相册中选择一张图片");
- plus.gallery.pick(function(path) {
- showImg(path);
- }, function(e) {
- mui.toast("取消选择图片");
- }, {
- filter: "image",
- multiple: false
- });
- }
- function galleryImgs() {
- //每次拍摄或选择图片前清空数组对象
- f1.splice(0, f1.length);
- document.getElementsByClassName("showimg")[0].innerHTML = null;
- // 从相册中选择图片
- mui.toast("从相册中选择不超过两张图片");
- plus.gallery.pick(function(e) {
- if (e.files.length != 2) {
- mui.toast('请选择身份证正面和背面照片共两张');
- return false;
- }
- for (var i in e.files) {
- showImg(e.files[i]);
- }
- }, function(e) {
- mui.toast("取消选择图片");
- }, {
- filter: "image",
- multiple: true
- });
- }
- // 拍照添加文件
- function cameraimages() {
- //每次拍摄或选择图片前清空数组对象
- f1.splice(0, f1.length);
- document.getElementsByClassName("showimg")[0].innerHTML = null;
- var cmr = plus.camera.getCamera();
- cmr.captureImage(function(p) {
- plus.io.resolveLocalFileSystemURL(p, function(entry) {
- var localurl = entry.toLocalURL(); //把拍照的目录路径,变成本地url路径,例如file:///........之类的。
- showImg(localurl);
- });
- }, function(e) {
- mui.toast("很抱歉,获取失败 " e);
- });
- }
- // 全局数组对象,添加文件,用于压缩上传使用
- var f1 = new Array();
- function imgupgrade() {
- mui.toast('后台联调时启用上传功能');
- return;
- var wt = plus.nativeUI.showWaiting();
- var url = '后台地址';
- var dataType = 'json';
- //发送数据
- var data = {
- files1: f1 //base64数据
- };
- mui.post(url, data, success, dataType);
- }
- //成功响应的回调函数
- var success = function(response) {
- plus.nativeUI.closeWaiting();
- if (response != null) {
- alert("上传成功");
- }
- }
- </script>
- function showImg(url) {
- // 兼容以“file:”开头的情况
- if (0 != url.toString().indexOf("file://")) {
- url = "file://" + url;
- }
- var div = document.getElementsByClassName("showimg")[0];
- var img = new Image();
- img.src = ur l; // 传过来的图片 路径在这里用。
- img.onclick = function () {
- plus.runtime.openFile(url);
- };
- img.onload = functi on() {
- var tmph = img.height;
- var tmpw = img.width;
- var isHengTu = tmpw > tmph;
- var max = Math.max(tmpw, tmph);
- var min = Math.min(tmpw, tmph);
- var bili = min / max;
- if (max > 1200) {
- max = 1200;
- min = Math.floor(bili * max);
- }
- tmph = isHengTu ? min : max;
- tmpw = isHengTu ? max : min;
- img.style.border = "1px solid rgb(200,199,204)";
- img.style.margin = "10px";
- img.style.width = "150px";
- img.style.height = "150px";
- img.onload = null;
- plus.io.resolveLocalFileSystemURL(url, function (entry) {
- entry.file(function (file) {
- console.log(file.size + '--' + file.name);
- canvasResize(file, {
- width: tmpw,
- height: tmph,
- crop: false,
- quality: 50, //压缩质量
- rotate: 0,
- callback: function (data, width, height) {
- f1.push(data);
- img.src = data;
- div.appendChild(img);
- plus.nativeUI.closeWaiting();
- }
- });
- });
- },
- function (e) {
- plus.nativeUI.closeWaiting();
- console.log(e.message);
- });
- };
- };
原文 分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片
分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片的更多相关文章
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- springMVC多图片压缩上传的实现
首先需要在配置文件中添加配置: <!--配置文件的视图解析器,用于文件上传,其中ID是固定的:multipartResolver--> <bean id="multipar ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
- 基于H5+ API手机相册图片压缩上传
// 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...
- js 图片压缩上传(base64位)以及上传类型分类
一.input file上传类型 1.指明只需要图片 <input type="file" accept='image/*'> 2.指明需要多张图片 <input ...
- HTML多图片压缩上传
本文介绍的是多张图片在前端统一压缩后再通过ajax提交给后台处理的业务,使用到的是LocalResizeIMG.js插件. 一.首先介绍项目结构 二.分享引用核心文件,这里没有分享CSS文件,因为没有 ...
- js 图片压缩上传(纯js的质量压缩,非长宽压缩)
下面是大神整理的demo,很实用,这里存一下备用,感谢大神! 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下 <!DOCTYPE ht ...
随机推荐
- VUE CLI3 less 全局变量引用
方法一 1.添加依赖 style-resources-loader 2.vue.config.js中添加 module.exports = { pluginOptions: { 'style-reso ...
- js原生方法的重写
讲干货,不啰嗦,通过prototype可以获取到JavaScript的原型对象,进而可以在对象原型上添加新的属性和方法,当该方法与原方法名称一样时会覆盖原方法既:重写,当不一样时既:添加 如:实现数组 ...
- 最近发现了一篇讲解Vue的虚拟DOM,diff很棒的文章,特定记录转载一下
本文章是转载的,为了方便以后复习,特地记录一下.他人请去原地址观看!!! 文章原地址:https://blog.csdn.net/m6i37jk/article/details/78140159 作者 ...
- CVE-2018-2879 - anniversary
For the anniversary of the discovery of CVE-2018-2879 by Sec Consult (https://sec-consult.com/en/blo ...
- Orion (system-on-a-chip)
From Wikipedia: Orion is a system-on-a-chip manufactured by Marvell Technology Group and used in n ...
- 使用JavaScript实现录入信息生成名片
首先是布局: 一个大的盒子模型套两个小的盒子模型:左边是录入信息生成界面,右边是名片显示界面. 框架: 这里新建一个css文件,用于外部链接使用装饰 /*最外层div,主框架*/ .frame{ wi ...
- C# 设置鼠标光标位置
C# 设置鼠标光标位置 using System.Drawing; using System.Runtime.InteropServices; namespace ZB.QueueSys.Common ...
- CodeForces 768E SG函数 整数划分 Game of Stones
一个标准的NIM游戏 加上一条规则:每堆石子对于每个数目的石子只能被取一次 可以SG打表 dp[i][j]表示现在有i个石子 j是可以取的石子数的状压 第i位为1就表示i个石子没被取过 #includ ...
- TODO 疑问:java中的工厂类,在实际项目中如何运用
正在读core of java,工厂类一直没搞懂.感觉和静态方法相类似,但是不知道是怎么运用在实际中. 20190711: 读了设计模式,里面给出的解读是这样的 Define an interface ...
- 利用Js的console对象,在控制台打印调式信息测试Js
一次偶然的机会,打开百度的时候按下了F12,然后就见控制台里面输出了百度的招聘广告,感觉挺帅气的,再然后就有了这篇博文. 既然可以这样在控制台输出信息,那以后再调试Js的时候不就可以省去很多麻烦了嘛! ...