如果您在使用 Vue 拍照組件時發現照片的左右顛倒了,那么這篇文章將為您提供解決方案。
mounted() { const video = this.$refs.video; // 初始化攝像頭 navigator.mediaDevices.getUserMedia({ audio: false, video: { width: 300, height: 300 } }).then(stream =>{ video.srcObject = stream; video.play(); // 翻轉攝像頭 const track = stream.getVideoTracks()[0]; const imageCapture = new ImageCapture(track); imageCapture.getPhotoCapabilities().then(() =>{ track.applyConstraints({ advanced: [{ facingMode: { exact: 'environment' } }] }); }); }); }
這段代碼是 Vue 拍照組件的一個例子。其實在做拍照應用時,我們通常都會使用 WebRTC 技術來調用攝像頭,然后將攝像頭拍攝的圖像放到 canvas 中進行處理。但是,調用攝像頭時,經常會出現左右顛倒的問題,這是因為攝像頭的傳感器通常會翻轉圖像。
為了解決這個問題,我們可以使用 ImageCapture API。這個 API 可以讓我們對攝像頭進行更細致的控制。在上面的代碼中,我們調用了 ImageCapture API,并獲取了攝像頭的拍照特性。然后,我們將需要翻轉的攝像頭約束為后置攝像頭,方法是將 facingMode 參數設置為 environment。
mirrorImage() { const canvas = this.$refs.canvas; const ctx = canvas.getContext('2d'); // 鏡像翻轉畫布 ctx.translate(canvas.width, 0); ctx.scale(-1, 1); // 繪制圖片 const img = this.$refs.video; ctx.drawImage(img, 0, 0, canvas.width, canvas.height); // 將結果轉成 base64 格式 const dataUrl = canvas.toDataURL('image/png'); this.$emit('on-capture', dataUrl); }
上面的代碼是拍照的邏輯。我們首先獲取到 canvas 對象和一個 2D 上下文,然后將畫布進行鏡像翻轉。在繪制圖片時,會使用攝像頭拍攝的影像,然后將圖片轉換為 base64 格式,并將該值傳遞給父組件,以便進行上載或保存。
通過以上兩個實例代碼,您應該能夠解決 Vue 拍照組件左右顛倒的問題了。如果您仍然遇到困難,可以將自己的代碼放到論壇或專業網站上,尋求幫助。