记录一下
第一步:
应用input, capture="camera"调用原生相机
<input onchange="photoChange(event)" type="file" accept="image/*" capture="camera" id="upload_file" />
第二步:获取到图片信息
应用FileReader读取到图片的信息
function photoChange(el) { const _this = this; var file = el.target.files[0];// name: "dangqi1.png" || type: "image/png" _this.fileName = file.name; var type = file.type.split('/')[0]; if (type === 'image') { var reader = new FileReader(); // FileReader reader.readAsDataURL(file); reader.onloadend = function () { var dataURL = reader.result; // 压缩图片 _this.compressImg(dataURL, { quality: 0.92, // 为了保留图片品质,压缩值设置为0.92 width: 1000 // 把图片尺寸调整为宽为1000的,高度自适应 }, file); }; } else { alert('上传了非图片'); } }
第三步:通过canvas进行图片解决
// 压缩 function compressImg(path, objCompressed, file) { var _this = this; var img = new Image(); img.src = path; img.onload = function () { var that = this; // 默认压缩后图片规格 var quality = 0.5; var w = that.width; var h = that.height; var scale = w / h; // 理论要求 w = objCompressed.width || w; h = objCompressed.height || (w / scale); if (objCompressed.quality && objCompressed.quality > 0 && objCompressed.quality <= 1) { quality = objCompressed.quality; } // 生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); // 创立属性节点 var anw = document.createAttribute('width'); anw.nodeValue = w; var anh = document.createAttribute('height'); anh.nodeValue = h; canvas.setAttributeNode(anw); canvas.setAttributeNode(anh); ctx.drawImage(that, 0, 0, w, h); // 此处的base64就是新失去的压缩图片了,能够用来传输了 var base64 = canvas.toDataURL('image/jpeg', quality); } }