이 글은 주로 Vue.js 2.0 모바일 카메라 압축 이미지 업로드 미리보기 기능을 소개합니다. 매우 훌륭하고 참고할만한 가치가 있습니다. 필요한 친구들이 참고할 수 있습니다.
Vue.js를 배우고 사용하는 과정에서 몇 가지 문제가 발생했습니다. 2.0 몇 가지 차이점이 있습니다. 원래 H5 애플리케이션은 모바일 측에서 개발되었으며, Vue.js+vue-router+vuex 제품군 버킷과 결합할 계획이었습니다. 그러나 사진을 찍고 업로드하는 구현 과정에서. , plus의 H5+ 인터페이스를 호출할 수 없는 문제가 발생하여 결국 사진 업로드 기능은 입력 파일 방식을 사용하여 해결되었습니다. 하지만 아직은 프로젝트의 진행과 반복 버전 때문에 포기해야 할 것 같습니다. 이 기능을 구현하려면 H5+ 인터페이스를 사용해야 합니다.
우선 이번 사진 미리보기, 압축, 업로드 구현에 대한 제 생각을 말씀드리겠습니다. 정확히 말하면 사진을 찍거나 이미지 압축을 선택한 후 미리보기하고 업로드하는 과정이겠죠. 매번 사진을 찍거나 이미지를 선택한 다음 이미지를 압축하고 미리 보고 업로드하세요. 업로드된 이미지 압축 플러그인은 localResizeIMG입니다. 이 플러그인 사용 지침은 위키에서 찾을 수 있습니다. 기본 원칙은 이미지를 캔버스를 통해 렌더링한 다음 toDataURL 메서드를 통해 압축하여 base64 문자열로 저장하는 것입니다. (jpg 형식의 이미지로 컴파일 가능) 압축 효과가 매우 좋습니다. iOS에서 2MB의 사진을 찍어 압축하면 60~80kb 정도가 됩니다. 하지만 제 프로젝트에서는 왜곡이 심하지 않습니다. , 그림이 명확하게 표시됩니다. 또한 제가 게시한 코드에서 그 사용에 대한 데모도 있을 것입니다.
<template> <h5 id="图片列表">图片列表</h5> <p class="image-list"> <p class="list-default-img" v-show="isPhoto" @click.stop="addPic"> <img src="/static/imghwm/default1.png" data-src="./images/icon_photo.png" class="lazy" / alt="Vue.js 2.0 모바일측 카메라 압축 이미지 업로드 미리보기 기능 구현" > <span>请选择或者拍照上传照片</span> <input type="file" accept="image/jpeg,image/jpg,image/png" capture="camera" @change="onFileChange" style="display: none;"> </p> <ul class="list-ul" v-show="!isPhoto"> <li class="list-li" v-for="(iu, index) in imgUrls"> <a class="list-link" @click='previewImage(iu)'> <img src="/static/imghwm/default1.png" data-src="iu" class="lazy" : alt="Vue.js 2.0 모바일측 카메라 압축 이미지 업로드 미리보기 기능 구현" > </a> <span class="list-img-close" @click='delImage(index)'></span> </li> <li class="list-li-add"> <span class="add-img" @click.stop="addPic"></span> </li> </ul> </p> <p class="add-preview" v-show="isPreview" @click="closePreview"> <img src="/static/imghwm/default1.png" data-src="previewImg" class="lazy" : alt="Vue.js 2.0 모바일측 카메라 압축 이미지 업로드 미리보기 기능 구현" > </p> </template> <script> export default { data: function () { return { imgUrls: [], urlArr: [], isPhoto: true, btnTitle: '', isModify: false, previewImg:'', isPreview: false } }, watch: { imgUrls: 'toggleAddPic' }, methods: { toggleAddPic: function() { let vm = this; if(vm.imgUrls.length >= 1) { vm.isPhoto = false; } else { vm.isPhoto = true; } }, addPic: function(e) { let vm = this; $('input[type=file]').trigger('click'); return false; }, onFileChange: function(e) { var files = e.target.files || e.dataTransfer.files; if(!files.length) return; this.createImage(files, e); }, createImage: function(file, e) { let vm = this; lrz(file[0], { width: 480 }).then(function(rst) { vm.imgUrls.push(rst.base64); return rst; }).always(function() { // 清空文件上传控件的值 e.target.value = null; }); }, delImage: function(index) { let vm = this; let btnArray = ['取消', '确定']; mui.confirm('确定删除该图片?','提示', btnArray, function(e) { if (e.index == 1) { vm.imgUrls.splice(index, 1); } }) }, previewImage: function(url){ let vm = this; vm.isPreview = true; vm.previewImg = url; }, closePreview: function(){ let vm = this; vm.isPreview = false; vm.previewImg = ""; }, 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]); } } //数据传输操作 } } } </script>
1. 사진을 찍거나 선택하려면 클릭하세요. addPic
vue.js에서 사진을 찍기 시작하고 사진을 선택하는 작업은 자주 수행됩니다. 사진을 찍거나 한 번에 한 장만 선택할 수 있습니다. 여러 장의 사진을 업로드하고 클릭하세요. .stop 수정자를 사용하여 이벤트가 추가됩니다. 버블링을 중지하려면 event.stopPropagation()이 호출됩니다. 수락은 파일 업로드를 통해 제출된 파일 유형을 지정하는 것입니다. 카메라--카메라--녹음.
사진 촬영 작업이 트리거되면 onFileChange에 변경 이벤트를 바인딩하여 파일 객체를 얻은 다음 lrz 메서드를 호출하여 이미지를 압축하고 base64 형식 기반의 이미지를 imgUrls 배열에 추가합니다.
lrz(file[0], { width: 480 }).then(function(rst) { vm.imgUrls.push(rst.base64); return rst; }).always(function() { // 清空文件上传控件的值 e.target.value = null; }); lrz(file, [options]);
file: input:file을 통해 얻은 파일이거나 이미지 경로를 직접 전달합니다.
[옵션]: 이 매개변수는 무시할 수 있습니다.
너비 {숫자} 기본값은 원본 이미지의 너비입니다. 높이가 설정되지 않은 경우 너비에 맞게 조정됩니다.
높이 {숫자} 위와 동일합니다. } 이미지 압축 품질, 값 0 - 1, 기본값은 0.7입니다.
fieldName {String} 백엔드에서 수신한 필드 이름, 기본값: file;
then(rst):
백엔드에서 처리할 수 있는 rst.formData 데이터 rst.file 압축 파일 개체(기본적으로 rst.formData에서 복사본이 손실됨) 압축률이 너무 낮으면 원본 파일 개체가 됩니다.
rst.fileLen 생성된 이미지의 크기, 백엔드는 이 값을 사용하여 전송이 완료되었는지 확인할 수 있습니다.
rst.base64 생성된 이미지 base64 , 백엔드에서 처리할 수 있습니다. 이 문자열은 이미지이며 img.src = base64에도 직접 사용됩니다.
rst.base64Len은 생성된 base64의 크기입니다. 백엔드는 이 값을 사용하여 전송이 완료되었는지 확인할 수 있습니다. base64 업로드 방법이 사용됨)
첫 번째 원본은 크기, 날짜 등과 같은 일부 원본 파일 정보를 저장하는 원본 파일 개체입니다.
// 清空文件上传控件的值 e.target.value = null;2 클릭하면 첫 번째 사진을 찍고 계속 사진을 찍을 수 있도록 미리보기와 DOM 디스플레이가 표시됩니다.
isPhoto
기본 isPhoto는 true이며 사진을 계속 찍을 수 있도록 DOM 디스플레이를 숨깁니다. 현재 선택된 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); } }) }
isPreview PreviewImage closePreview
在这里大图预览就是将base64格式的图片直接放进预览DOM的img src中放大展示,点击图片自身关闭预览,清空img src资源。
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字符串处理成图片时,需要将特殊字符过滤掉。
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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
基于casperjs和resemble.js实现一个像素对比服务
위 내용은 Vue.js 2.0 모바일측 카메라 압축 이미지 업로드 미리보기 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python과 JavaScript의 주요 차이점은 유형 시스템 및 응용 프로그램 시나리오입니다. 1. Python은 과학 컴퓨팅 및 데이터 분석에 적합한 동적 유형을 사용합니다. 2. JavaScript는 약한 유형을 채택하며 프론트 엔드 및 풀 스택 개발에 널리 사용됩니다. 두 사람은 비동기 프로그래밍 및 성능 최적화에서 고유 한 장점을 가지고 있으며 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.

Python 또는 JavaScript를 선택할지 여부는 프로젝트 유형에 따라 다릅니다. 1) 데이터 과학 및 자동화 작업을 위해 Python을 선택하십시오. 2) 프론트 엔드 및 풀 스택 개발을 위해 JavaScript를 선택하십시오. Python은 데이터 처리 및 자동화 분야에서 강력한 라이브러리에 선호되는 반면 JavaScript는 웹 상호 작용 및 전체 스택 개발의 장점에 없어서는 안될 필수입니다.

파이썬과 자바 스크립트는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구와 개인 선호도에 따라 다릅니다. 1. Python은 간결한 구문으로 데이터 과학 및 백엔드 개발에 적합하지만 실행 속도가 느립니다. 2. JavaScript는 프론트 엔드 개발의 모든 곳에 있으며 강력한 비동기 프로그래밍 기능을 가지고 있습니다. node.js는 풀 스택 개발에 적합하지만 구문은 복잡하고 오류가 발생할 수 있습니다.

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.