记录一下

第一步:
使用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);
            }
        }

麦兜兜
15 声望3 粉丝

一个前端