图片上传

/**
 * @method uploadImg 上传图片处理
 * @param  dom  dom元素
 * @param  callback 上传图片后的回调处理
 * @param  imgSet 设置图片的宽高及quality模糊度
 */
function uploadImg(dom,callback,imgSet={}) {
  // 通过dom读取文件数据;是个伪数组(可一次选择多张图片),要使用数组遍历并转为base64;
  let files = dom.files;
  for(let i = 0; i<files.length; i++) {
    let reader = new FileReader();
    reader.readAsDataURL(files[i]);
    reader.onload = (e) =>{
      let imgCode = e.target.result;
      canvasDataUrl(imgCode,callback,imgSet);
      // 可多次上传同一张图片;
      dom.setAttribute('type', 'txt');
      dom.setAttribute('type',"file");
    }
  };
};
function canvasDataUrl(path,callback,imgSet) {
  let img = new Image();
  img.src = path;
  img.onload = function() {
    // 上图图片的原始宽高;
    let w = this.width,
        h = this.height,
        scale = w / h;
    // 如果imgSet有值,则优先选择imgSet;
    w = imgSet.width || w;
    h = imgSet.height || (w / scale);
    let quality = 0.4;
    //生成canvas
    let canvas = document.createElement('canvas');
    let ctx = canvas.getContext('2d');
    // 创建属性节点
    let anw = document.createAttribute("width");
    anw.nodeValue = w;
    let anh = document.createAttribute("height");
    anh.nodeValue = h;
    canvas.setAttributeNode(anw);
    canvas.setAttributeNode(anh);
    ctx.drawImage(this, 0, 0, w, h);
    // 图像质量
    if(imgSet.quality && imgSet.quality <= 1 && imgSet.quality > 0){
      quality = imgSet.quality;
    }
    // quality值越小,所绘制出的图像越模糊,返回压缩后base64的值
    let base64 = canvas.toDataURL('image/png', quality);
    callback(base64);
  }
}
export default uploadImg;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值