com.js

export const compressImage=function (files,fn,preCallbackFn,i) {
let newfile = files.files[0];
let quality = 0.1;
const name = newfile.name; //文件名
let reader = new FileReader();
reader.readAsDataURL(newfile);
reader.onload = (e) => {
const src = e.target.result;
const img = new Image();
img.src = src;
img.onload = (e) => {
const w = img.width;
const h = img.height;
//生成canvas
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 创建属性节点
const anw = document.createAttribute("width");
anw.nodeValue = w;
const anh = document.createAttribute("height");
anh.nodeValue = h;
canvas.setAttributeNode(anw);
canvas.setAttributeNode(anh); //铺底色 PNG转JPEG时透明区域会变黑色
ctx.fillStyle = "#fff";
ctx.fillRect(0, 0, w, h); ctx.drawImage(img, 0, 0, w, h);
// quality值越小,所绘制出的图像越模糊
const base64 = canvas.toDataURL('image/jpeg', quality); //图片格式jpeg或webp可以选0-1质量区间 console.log(`原图${(src.length / 1024).toFixed(2)}kb`, `新图${(base64.length / 1024).toFixed(2)}kb`);
if(base64.length>1024*1024*1){
return false;
} let arr = base64.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
let obj = new Blob([u8arr], {type:'image/jpeg'});
preCallbackFn && preCallbackFn(base64,obj,i);
fn && fn(obj);
}
}
}; //上传图片校验
export const checkImg=function(file){
var aa=file.value.toLowerCase().split('.');
if(!(aa[aa.length-1]=='gif'||aa[aa.length-1]=='jpg'||aa[aa.length-1]=='jpeg'||aa[aa.length-1]=='png')){
throw {code:400,msg:"请选择格式为*.jpg、*.gif、*.jpeg、*.png的图片"};
}
var imagSize = file.files[0].size;
if(imagSize>1024*1024*1){
throw {code:401,msg:"图片过大,无法上传"};
}
return true;
};
 
import {checkImg,compressImage} from "com";

 imgPreview(){
let file=document.getElementById("imgInput");
try {
checkImg(file)
}catch(e) {
if(e.code==401){
if(compressImage(file,this.upImg,this.preCallbackFn) === false){
return alert(e.msg);
}
return true;
}else {
return alert(e.msg);
}
}
if (file.files && file.files[0]) {
let reader = new FileReader();
reader.onload = function (evt) {
let img = document.querySelector('#img_preview img');
img.setAttribute('src', evt.target.result);
}
reader.readAsDataURL(file.files[0]);
this.upImg(file.files[0]);
}
},
upImg(file){
let formData = new FormData();
formData.append("img", file,"image.jpeg");     //fileUpload 上传为接口 fileUpload(formData).then(data=>{
          if(!data) return false;
userModifyImg(data).then(data=>{
if(!data) return false;
alert("上传图片成功!")
});
});
},
 

最新文章

  1. 3.1 js基本概念
  2. wpf 获取datagrid中模板中控件
  3. HTML5与移动端web学习笔记
  4. 黄聪:深入理解PHP Opcode缓存原理
  5. Flask框架获取用户IP地址的方法
  6. Java批量文件打包下载zip
  7. VS2012中使用Boost库的方法(超级简单)
  8. sqlserver 查找某个字符在字符串中第N次出现的位置
  9. struts2第一个程序的详解(配图)
  10. JIRA描述默认值设置
  11. Linux系统启动过程详解
  12. Leetcode 226. Invert Binary Tree(easy)
  13. Django学习手册 - Form 插件
  14. linux软件管理 YUM命令
  15. 10--Python入门--异常处理
  16. xml和对象 转换
  17. 发布Docker 镜像到dockerhub
  18. Linux基础命令---ipcalc计算IP
  19. 守护进程函数——内部的小范围try catch 增强了 while死循环执行的 可靠性
  20. Dubbo(6)Dubbo服务集群实现负载均衡

热门文章

  1. html 获取鼠标左键事件,滚轮点击事件,右键点击事件
  2. java23种设计模式之一: 策略模式
  3. vmware 安装ubuntu
  4. HDU2017新生赛 找方块
  5. python 函数参数介绍
  6. [Java学习] Java继承的概念与实现
  7. WPF中的Style(风格,样式)
  8. android----AsyncHttpClient的get,post和图片上传
  9. Intent在Activity之间传值的几种方式
  10. iOS UI-手势(Gesture)