js 压缩 预览 上传图片
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("上传图片成功!")
});
});
},
js 压缩 预览 上传图片的更多相关文章
- 用js实现预览待上传的本地图片
		js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ... 
- js预览上传图片
		<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ... 
- html5 ajax多图片可预览上传图片
		最近不是特别忙,我就利用html5写了个上传图片(或其他文件)的页面,主要利用是html5的file api,此页面比较简陋,没做样式的优化,包含上传图片预览,多图片上传,上传进度条(利用html5的 ... 
- 移动端Vue图片获取,压缩,预览组件-upload-img(H5+获取照片,压缩,预览)
		组件示例图 组件代码 upload_img.vue <div id="uploadImg"> <div class="upload_image_box& ... 
- js图片预览插件,不涉及上传
		小小的几十行代码,很牛逼,很实用. 支持多个图片的预览,只要new多个对象就行了. html如下 <!-- zhouxiang www.zhou-xiang.com --> <!DO ... 
- fis3+vue+pdf.js制作预览PDF文件或其他
		人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ... 
- C# asp:FileUpload上传文件使用JS实现预览效果
		js代码: <script type="text/javascript"> //下面用于图片上传预览功能 function setImagePreview() { va ... 
- previewImage.js图片预览缩放保存插件
		previewImage.js好用的图片预览缩放保存插件 
- pc或者微信上用pdf.js在线预览pdf和word
		最近项目要求pdf和word可以在线预览功能,pc端还好解决,但是微信端就有点坑了,pc端原来的思路是将文件转成base64,然后用html格式显示 ,但是微信端不支持, 这种方式就pass掉了,谷歌 ... 
随机推荐
- vs2010_相关目录
			1. C:\Program Files\Microsoft SDKs\Windows\v7.0A 2.创建了 C:\Program Files\Microsoft Visual Studio 9.0 ... 
- MyBatis3-基于注解的示例
			在基于注解的示例中,可以简化编写XML的过程,全部采用注解方式进行编写,并在注解上写SQL语句,语句和XML的语句保持一致,并且可以省略掉XML文件不用引入的好处.但还有一点,基于注解的方式还没有百分 ... 
- C#读写记事本(txt)文件
			C#写入记事本(txt)文件方法一: FileStream stream = new FileStream(@"d:\aa.txt",FileMode.Create);//file ... 
- Freemarker 简介
			1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效果就不会再发生变化(除非你修改 ... 
- LeetCode--136--只出现一次的数字
			问题描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: ... 
- 微信小程序自定义模态框(字体图标)
			组件已经传到github,自行下载:https://github.com/JinZhenZon/miniapp-customModel 支持如下配置: { outWidth <number&g ... 
- Oracle 11g 物理Dataguard日常操作维护(二)
			Oracle 11g 物理Dataguard日常操作维护(二) 2017年8月25日 14:34 3.3 3.3.1 查看备库进程状态 SYS(125_7)@fpyj123> select pr ... 
- OAF点击事件对页面组件的Required属性不验证
			在实际的需求中,OAF页面上很多字段设置了Required=YES,但是我们在点击某些按钮的时候,并不希望浏览器对其进行验证,可以通过设置 Disable Server Side Validation ... 
- spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid
			SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ... 
- kill word out e ef en em
			1● e 2● ef 出,出来 3● en 4● em 使~进入状态,包围,进入~之中 
