js 图片压缩上传(base64位)以及上传类型分类
一、input file上传类型
1.指明只需要图片
- <input type="file" accept='image/*'>
2.指明需要多张图片
- <input type="file" multiple accept='image/*'>
3.指明调用摄像头获取图片
- <input type="file" capture='camera' accept='image/*'>
4.调用摄像头并获取多张图片(摄像头只能单张获取,multiple无效)
- <!-- multiple 无效 -->
- <input type="file" multiple capture='camera' accept='image/*'>
二、图片压缩上传
(1)移动端IOS上传的某些图片预览时发生了旋转?
你会发现手机截图,网络图片都不会有旋转问题,只有手机拍摄的才有,这就跟拍摄时的角度有问题了,所以我们通过 exif.js 获取角度(Orientation)的值,所获值分别需要旋转的角度如下:
旋转角度 | 参数值 |
---|---|
0° | 1 |
顺时针90° | 6 |
逆时针90° | 8 |
180° | 3 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title></title>
- <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
- <script src="js/jquery-1.11.3.min.js"></script>
- <script src="js/exif.js"></script>
- <style>
- #preview{
- width:100px;
- height:110px;
- }
- </style>
- </head>
- <body>
- <input type="file" id="files" >
- <img src="blank.gif" id="preview">
- <script>
- var ipt = document.getElementById('files'),
- img = document.getElementById('preview'),
- Orientation = null;
- ipt.onchange = function () {
- var file = ipt.files[0],
- reader = new FileReader(),
- image = new Image();
- if(file){
- EXIF.getData(file, function() {
- Orientation = EXIF.getTag(this, 'Orientation');
- console.log(Orientation);
- });
- reader.onload = function (ev) {
- image.src = ev.target.result;
- image.onload = function () {
- var imgWidth = this.width,
- imgHeight = this.height;
- // 控制上传图片的宽高
- if(imgWidth > imgHeight && imgWidth > 600){
- imgWidth = 600;
- imgHeight = Math.ceil(600 * this.height / this.width);
- }else if(imgWidth < imgHeight && imgHeight > 600){
- imgWidth = Math.ceil(600 * this.width / this.height);
- imgHeight = 600;
- }
- var canvas = document.createElement("canvas"),
- ctx = canvas.getContext('2d');
- canvas.width = imgWidth;
- canvas.height = imgHeight;
- if(Orientation && Orientation != 1){
- switch(Orientation){
- case 6: // 旋转90度
- canvas.width = imgHeight;
- canvas.height = imgWidth;
- ctx.rotate(Math.PI / 2);
- ctx.drawImage(this, 0, -imgHeight, imgWidth, imgHeight);
- break;
- case 3: // 旋转180度
- ctx.rotate(Math.PI);
- ctx.drawImage(this, -imgWidth, -imgHeight, imgWidth, imgHeight);
- break;
- case 8: // 旋转-90度
- canvas.width = imgHeight;
- canvas.height = imgWidth;
- ctx.rotate(3 * Math.PI / 2);
- ctx.drawImage(this, -imgWidth, 0, imgWidth, imgHeight);
- break;
- }
- }else{
- ctx.drawImage(this, 0, 0, imgWidth, imgHeight);
- }
- var newImageData = canvas.toDataURL("image/jpeg", 0.6);
- $("img").attr("src", newImageData.replace("data:base64", "data:image/jpeg;base64"));
- }
- }
- reader.readAsDataURL(file);
- }
- }
- </script>
- </body>
- </html>
js 图片压缩上传(base64位)以及上传类型分类的更多相关文章
- 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器
使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- js 图片压缩上传(纯js的质量压缩,非长宽压缩)
下面是大神整理的demo,很实用,这里存一下备用,感谢大神! 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下 <!DOCTYPE ht ...
- js图片压缩+ajax上传
图片压缩用到了localresizeimg 地址: https://github.com/think2011/localResizeIMG 用起来比较简单 <input type="f ...
- JS—图片压缩上传(单张)
*vue+webpack环境,这里的that指到vue实例 <input type="file" name="file" accept="ima ...
- js图片压缩和上传并显示
由于近期项目中需要做个图片压缩上传,所以就在网上找了些资料自己写了一个 html部分 <input id="file" type="file"> & ...
- Angular里使用(image-compressor.js)图片压缩
参考资料: http://www.imooc.com/article/40038 https://github.com/xkeshi/image-compressor 示例代码: <nz-upl ...
- js图片压缩上传
最近公司的移动产品相约app要做一次活动,涉及到图片上传,图片又不能太大,不然用户体验太差,必须先压缩再上传,所以用到了html5的canvas和FileReader,代码先上,小弟前端经验不足,代码 ...
- js图片预览插件,不涉及上传
小小的几十行代码,很牛逼,很实用. 支持多个图片的预览,只要new多个对象就行了. html如下 <!-- zhouxiang www.zhou-xiang.com --> <!DO ...
随机推荐
- java实现排列为平方数
** 排列为平方数** 若干不同的数字,排列组合后能产生多少个平方数? 下面的代码解决了这个问题. 对于:1,6,9 排列后,可产生3个平方数: 169 196 961 请阅读下面的代码,填写缺失的部 ...
- Mybatis连接池及事务
一:Mybatis连接池 我们在学习WEB技术的时候肯定接触过许多连接池,比如C3P0.dbcp.druid,但是我们今天说的mybatis中也有连接池技术,可是它采用的是自己内部实现了一个连接池技术 ...
- 使用阿里云K8S 服务,丢失访问中原始IP 问题
解决步骤: 1. 利用kubectl 修改 k8s 配置, 设置 external** = Local 2. 在服务发现与负载均衡界面,选择对应的LB 服务, 设置服务LB 的 external** ...
- python基础003----标准数据类型
一.标准数据类型 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要开发者主动去说明它的类型,系统会自动识别.可以用type(变量名)来查看变量的类型.常见的变量类型 ...
- 查看apk安装包信息
➜ sdk aapt dump badging ~/Downloads/PermRoot8006.apk package: name='com.qihoo.permmgr' versionCode=' ...
- [置顶] linux中fork()函数详解(原创!!实例讲解)
分类: 计算机系统 linux2010-06-01 23:35 60721人阅读 评论(105) 收藏 举报 linux2010存储 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源 ...
- spring源码分析——BeanPostProcessor接口
BeanPostProcessor是处理bean的后置接口,beanDefinitionMaps中的BeanDefinition实例化完成后,完成populateBean,属性设置,完成 初始化后,这 ...
- Python编程快速上手 让繁琐工作自动化 - 专业程序员的养成完整版PDF免费下载_百度云盘
Python编程快速上手 让繁琐工作自动化 - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:7qm4 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 通用 ...
- linux环境下安装git(采用github下载git源码编译)
[目的]:linux环境下 安装配置git成功 [准备条件]linux系统,git包 1.先行下载git包 -- 从github上https://github.com/git/git/releases ...
- OS_页面置换算法:C++实现
一.实验目的: 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率. 二.实验内容: 本实 ...