Vue.js 2.0 移动端拍照压缩图片预览及上传实例(2)

默认 isPhoto 为true,隐藏继续拍照的DOM显示,toggleAddPic 监听当前选中imgUrls数组长度,转换 isPhoto 的布尔值若有一张及以上的图片设置 isPhoto 为false, 则隐藏点击拍第一张照片DOM,显示继续拍照的DOM;若没有图片,则隐藏继续拍照的DOM,显示击拍第一张照片DOM。

3. 删除已选择的压缩图片 delImage

根据数组对应的下标,在imgUrls中删除对应的图片数据。

delImage: function(index) { let vm = this; let btnArray = ['取消', '确定']; mui.confirm('确定删除该图片?','提示', btnArray, function(e) { if (e.index == 1) { vm.imgUrls.splice(index, 1); } }) }

Vue.js 2.0 移动端拍照压缩图片预览及上传实例

4. 大图预览已经被压缩的图片及关闭大图预览  isPreview previewImage closePreview

在这里大图预览就是将base64格式的图片直接放进预览DOM的img src中放大展示,点击图片自身关闭预览,清空img src资源。

Vue.js 2.0 移动端拍照压缩图片预览及上传实例

5. 对base64图片传输前的处理 saveImage

saveImage: function(){ let vm = this; let urlArr = [], imgUrls = this.imgUrls; for(let i = 0; i < imgUrls.length; i++) { if(imgUrls[i].indexOf('file') == -1) { urlArr.push(imgUrls[i].split(',')[1]); } else { urlArr.push(imgUrls[i]); } } //数据传输操作 }

我压缩成base64字符串是“data:image/jpeg;base64,~~”的字符串,为了后端好处理,我这里为了将编辑时候后台返回的图片url区别开来,将“data:image/jpeg;base64,"截取掉,只传递给后端逗号后面的base64字符串。

注意:后端接收到我传递的base64字符串数组的时候,发现字符经如果被urlencode后标准的base64中的/、 +会被转成%xx,后端在将base64字符串处理成图片时,需要将特殊字符过滤掉。

[HttpPost] public ActionResult MUploadImgBase64Str(string base64str) { try { var imgData = base64str; //过滤特殊字符即可 string dummyData = imgData.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+"); if (dummyData.Length % 4 > 0) { dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '='); } byte[] byteArray = Convert.FromBase64String(dummyData); using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray)) { var img = System.Drawing.Image.FromStream(ms); var path = "~/Content/UploadFiles/mobile/"; var uploadpath = Server.MapPath(path); if (!Directory.Exists(uploadpath)) { Directory.CreateDirectory(uploadpath); } var saveName = uploadpath + “stoneniqiu” + ".jpg"; img.Save(saveName); return Json(saveName); } } catch (Exception e) { return Json(e.Message); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wypggp.html