這次帶給大家H5怎麼呼叫相機拍照並壓縮圖片,怎麼用H5調用相機拍照並壓縮圖片? H5呼叫相機拍照並壓縮圖片的注意事項有哪些,以下就是實戰案例,一起來看一下。
整理文檔,搜刮出一個H5調用相機拍照並壓縮圖片的實例程式碼,稍微整理精簡一下做下分享。
背景
最近要做一個h5的頁面,主要功能就是呼叫相機拍照或是相簿選圖並且把照片壓縮轉base64之後上傳到後台伺服器,然後伺服器傳回識別結果。
前端的主要功能點有:
H5如何呼叫相機
圖片如何壓縮
圖片轉base64
H5呼叫相機/相簿
呼叫相機最簡單的方法就是使用input file[camera]屬性:
<input type="file" capture=camera accept="image/*">//相机 <input type="file" accept="image/*">//相册
這個種方法相容性還是有問題的,在iphone手機上可以正常開啟相機,但是在安卓手機上點擊之後是相機、圖庫、檔案管理器等混合選擇項目。在網路上搜了很多都沒有什麼好的解決辦法,只能繼續往下寫了。 。 。
圖片壓縮
圖片壓縮就要用到FileReader和5ba626b379994d53f7acf72a64f9b697了。
FileReader物件允許Web應用程式非同步讀取儲存在電腦上的檔案的內容,使用File或Blob物件指定要讀取的檔案或資料。
5ba626b379994d53f7acf72a64f9b697是一個可以使用腳本在其中繪製圖形的HTML元素,可以繪製圖形和簡單的動畫。
圖片壓縮要壓縮圖片的解析度和質量,解析度壓縮我這裡是設定了圖片的最大邊為800,另一邊依照圖片原有比例縮放,也可以設定圖片整體的縮放比例。
var MAX_WH=800; var image=new Image(); image.onload=function () { if(image.height > MAX_WH) { // 宽度等比例缩放 *= image.width *= MAX_WH/ image.height; image.height = MAX_WH; } if(image.width > MAX_WH) { // 宽度等比例缩放 *= image.height *= MAX_WH/ image.width; image.width = MAX_WH; } } image.src=dataURL;//dataURL通过FileReader获取
然後就是壓縮圖片的品質了,這裡設定壓縮了80%,如果設定太小圖片就失真了。動態創建5ba626b379994d53f7acf72a64f9b697標籤然後壓縮圖片:
var quality=80; var cvs = document.createElement('canvas'); cvs.width = image.width; cvs.heigh = image.height; var context=cvs.getContext("2d"); context.drawImage(image, 0, 0,image.width, image.height); dataURL = cvs.toDataURL('image/jpeg', quality/100);
然後就是上傳到伺服器並展示伺服器的結果啦,然而事情並沒有那麼順利。 。 。 ios手機拍照壓縮之後圖片莫名的旋轉了,繼續解決問題。
解決IOS圖片旋轉
先引用exif.js,透過EXIF.getData和EXIF.getTag取得拍照方向資訊。
//file通过input标签获取 EXIF.getData(file,function(){ orientation=EXIF.getTag(file,'Orientation'); });
在取得圖片的方向資訊之後,根據取得到的值作對應的旋轉操作。
switch (orientation) { case 6: case 8: cvs.width = height; cvs.height = width; break; } var context=cvs.getContext("2d"); switch(orientation){ //iphone横屏拍摄,此时home键在左侧 case 3: // 180度向左旋转 context.translate(width, height); context.rotate(Math.PI); break; //iphone竖屏拍摄,此时home键在下方(正常拿手机的方向) case 6: context.rotate(0.5 * Math.PI); context.translate(0, -height); break; //iphone竖屏拍摄,此时home键在上方 case 8: // 逆时针旋转90度 context.rotate(-0.5 * Math.PI); context.translate(-width, 0); break; }
相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
以上是H5怎麼調用相機拍照並壓縮圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!