JavaScript在前端開發中的重要性不言而喻,其中涉及到的功能也越來越多。如今,成為前端開發人員必備技能之一的圖片上傳和處理能力也逐漸被加入其中,其中最關鍵的一環就是手機拍照上傳功能。
我們都知道,手機拍照不能使用普通的input標簽來實現,需要借助HTML5的API,特別是“input[type='file']”和“canvas”兩個對象來實現圖片上傳和處理。以下是一段簡單的代碼實現:
// html部分 <input type="file" accept="image/*" id="photo" capture="camera"> // javascript部分 var fileInput = document.querySelector('#photo'); var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); fileInput.addEventListener('change', function() { var file = this.files[0]; if (!/image\/\w+/.test(file.type)) { alert('請選擇圖片文件!'); return; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(e) { var image = new Image(); image.src = e.target.result; image.onload = function() { canvas.width = image.width; canvas.height = image.height; ctx.drawImage(image, 0, 0); var dataUrl = canvas.toDataURL('image/png'); // 將dataUrl上傳到服務器... }; }; }, false);
以上代碼實現了使用手機拍照,或從相冊選擇圖片上傳到服務器。當然,在實際開發中,為了更好的用戶體驗,我們可以嘗試使用拍照按鈕打開攝像頭,而非選擇照片板塊。以下是另一段代碼示例,實現了調用攝像頭拍照并上傳圖片的功能:
// html部分 <div id="camera"> <video id="video" playsinline style="transform: scaleX(-1); object-fit: cover;width: 100%;height: 100%;"></video> <canvas id="canvas" style="display:none;"></canvas> </div> // javascript部分 var video = document.getElementById('video'); var canvas = document.getElementById('canvas'); navigator.mediaDevices.getUserMedia({ audio: false, video: { facingMode: 'environment', }, }).then(function(stream) { video.srcObject = stream; video.play(); }).catch(function(err) { console.log(err); }); document.querySelector('#shoot').addEventListener('click', function() { canvas.width = video.videoWidth; canvas.height = video.videoHeight; canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); var dataURL = canvas.toDataURL('image/png'); // 將dataUrl上傳到服務器... });
在使用攝像頭拍照上傳時,需要借助“navigator.mediaDevices.getUserMedia()”接口打開攝像頭,并使用canvas把攝像頭視頻流截取下來,在截取的圖片上進行處理后上傳到服務器,而調用函數則是綁定拍照按鈕的點擊事件,實現了一鍵拍照的操作。
雖然以上代碼都非常簡單,但黃花菜也可以吃兩遍,尤其是在手機拍照上傳時,不同的設備、瀏覽器和網絡環境都會對圖片上傳產生影響,需要仔細測試并調試代碼。
綜上所述,使用JavaScript實現手機拍照上傳的操作已成為前端開發不可缺少的一部分,同時通過不斷嘗試和實踐,使得圖片上傳的效果更加優秀,體驗更加友好,進而提高用戶對網站或應用的滿意度。