1. 程式人生 > >使用HTML5+呼叫手機攝像頭和相簿

使用HTML5+呼叫手機攝像頭和相簿

例項:

具體流程:點選觸發選擇拍照或相簿-->拍照或相簿選擇照片-->拿到圖片路徑進行壓縮-->讀取檔案並顯示在頁面上

  1. 首先是html程式碼,很簡單,就是給一個新增按鈕,點選觸發事件,這裡我就不把css檔案放出來,大家知道是一個新增按鈕就行。
    <h2 class="title-detail">
                       	圖片描述
                    </h2>
                    <input type="hidden" id="picIndex" value="0">
                    <div id='image-list' class="row image-list">
                    	<!-- <input id="upload_image" type="file" name="image" accept="image/*" /> -->
                    	 <div class="image-item space" onclick="showActionSheet()">
                    		<div class="image-up"></div>
                    	</div>
                    </div>
    
  2. 後面我們來看下具體的js程式碼,按照上面我們說的方法共分為5個方法,具體如下:
    //圖片顯示
           function showPics(url,name){    	   
        	 //根據路徑讀取到檔案 
               plus.io.resolveLocalFileSystemURL(url,function(entry){
            	   entry.file( function(file){
            		   var fileReader = new plus.io.FileReader();
            		   fileReader.readAsDataURL(file);
                       	   fileReader.onloadend = function(e) {
                    	       var picUrl = e.target.result.toString();
                    	       var picIndex = $("#picIndex").val();
    	               		var nowIndex = parseInt(picIndex)+1;
    	               		$("#picIndex").val(nowIndex);
    	               		var html = '';
    	               		html += '<div class="image-item " id="item'+nowIndex+'">';
    	               		html += '<div class="image-close" onclick="delPic('+nowIndex+')">X</div>';
    	               		html += '<div><img src="'+picUrl+'" class="upload_img" style="width:100%;height:100%;"/></div>';
    	               		html += '</div>';
    	               		html += $("#image-list").html();
    	               		$("#image-list").html(html); 
                       	}
            	   });
              }); 
           }
         	//壓縮圖片  
           function compressImage(url,filename){  
               var name="_doc/upload/"+filename;
               plus.zip.compressImage({  
                       src:url,//src: (String 型別 )壓縮轉換原始圖片的路徑  
                       dst:name,//壓縮轉換目標圖片的路徑  
                       quality:40,//quality: (Number 型別 )壓縮圖片的質量.取值範圍為1-100  
                       overwrite:true//overwrite: (Boolean 型別 )覆蓋生成新檔案  
                   },  
                   function(zip) {
                	   //頁面顯示圖片
                	   showPics(zip.target,name);
                   },function(error) {  
                       plus.nativeUI.toast("壓縮圖片失敗,請稍候再試");  
               });  
           } 
          
         	//呼叫手機攝像頭並拍照
           function getImage() {  
               var cmr = plus.camera.getCamera();  
               cmr.captureImage(function(p) {  
                   plus.io.resolveLocalFileSystemURL(p, function(entry) {  
                       compressImage(entry.toLocalURL(),entry.name);  
                   }, function(e) {  
                       plus.nativeUI.toast("讀取拍照檔案錯誤:" + e.message);  
                   });  
               }, function(e) {  
               }, {  
                   filter: 'image' 
               });  
           }
           //從相簿選擇照片(單張)
           function galleryImgs() {  
        	    plus.gallery.pick(function(e) {  
        	    	var name = e.substr(e.lastIndexOf('/') + 1);
        	       compressImage(e,name);
        	    }, function(e) {  
        	    }, {  
        	        filter: "image"  
        	    });  
        	}
             //從相簿選擇照片(多張)
           galleryImgs(){
            let _this = this;
            plus.gallery.pick(function(event) {
            var files = event.files;
                for(var i=0;i<files.length;++i){
                  var file = files[i];
                    plus.io.resolveLocalFileSystemURL(file,function(entry){
                       _this.showPics(entry.fullPath);
    
                });
              }
            }, function(e) {
            }, {
              filter: "image",
              multiple:true
            });
          }
           
           //點選事件,彈出選擇攝像頭和相簿的選項
        	function showActionSheet() {  
        	    var bts = [{  
        	        title: "拍照"  
        	    }, {  
        	        title: "從相簿選擇"  
        	    }];  
        	    plus.nativeUI.actionSheet({  
        	            cancel: "取消",  
        	            buttons: bts  
        	        },  
        	        function(e) {  
        	            if (e.index == 1) {  
        	                getImage();  
        	            } else if (e.index == 2) {  
        	                galleryImgs();  
        	            }  
        	        }  
        	    );  
        	}
    
  3. 有幾點進行說明下:(1):壓縮圖片方法,這裡我採用的是重新寫一個新檔案  (2):圖片顯示方法,該方法很重要。因為我這邊坐的是WEB端APP,頁面都由伺服器返回,我們可以拿到的是手機本地的圖片,網上很多說法是直接拿檔案路徑就顯示了,但是我卻怎麼都沒顯示出來。所以才用了FileReader將本地檔案讀取過來,e.target.result.toString();這個方法返回的就是我們的圖片的base64編碼,所以你看到下面我是動態拼HTML頁面,直接將該內容賦值給img標籤的src就可以直接顯示圖片。【這裡曾經糾結很久】有了這個base64編碼的url,我們就可以直接上傳到後臺。

使用注意:

這裡主要講打包工具不同需要做的工作也不太一樣。我這邊是用的Hbuilder線上打包,當然外殼也可以是Android環境打包,下面具體講下要注意的地方。

  1. Hbuilder:這個是一個很方便的web開發工具,可以線上打包APP。【由於網路問題,我上傳不了圖片,儘量文字描述】我們需要在Hbuilder裡面建一個APP專案,點開manifest.json檔案,這個檔案就是我們APP的配置資訊,下面導航欄分別為:應用資訊、圖示配置、啟動Flash配置、SDK配置、許可權模組配置等。一般我們需要配下應用資訊(APP的名字、入口),圖示,啟動flash(可以選擇啟動圖片),SDK配置一般是一些地圖、支付、推送等。重點來了,我們如果使用HTML5+,需要在模組許可權配置裡面,選擇我們用到的功能,比如我們用到了plus.nativeUI.*,就需要選擇NativeUI(原生UI)模組,也就是說,我們用了plus.xx.*,就需要勾選相應的模組。【這個manifest.json是視覺化介面,大家下載安裝就能明白】
  2. Android環境:相對Hbuilder,Android環境稍微複雜一點,由於我沒有在Android環境裡搞過這個,這裡只是介紹下Hbuilder官網的一些使用說明。

    舉例說明:例如我們需要使用Camera物件,需要做如下配置:

    2.1:新增camera.jar。

    2.2:AndroidManifest.xml permission節點中新增:

    <uses-permission android:name="android.permission.CAMERA"/>
               <uses-feature android:name="android.hardware.camera"/>

    2.3:properties.xml features節點中新增:

               <featurename="Camera" value="io.dcloud.js.camera.CameraFeatureImpl"/>

  1. 這個配置方式在Hbuilder的官網上可以下載,裡面包含所有的jar包和不同的許可權所需的配置。
  2. 感謝分享http://blog.csdn.net/u013185616/article/details/53195820

相關推薦

使用HTML5+呼叫手機攝像頭相簿

例項: 具體流程:點選觸發選擇拍照或相簿-->拍照或相簿選擇照片-->拿到圖片路徑進行壓縮-->讀取檔案並顯示在頁面上 首先是html程式碼,很簡單,就是給一個新增按鈕,點選觸發事件,這裡我就不把css檔案放出來,大家知道是一個新增按鈕就行。 &

html5呼叫手機攝像頭

<input type="file" accept="image/*" capture="camera"><input type="file" accept="video/*" capture="camcorder"><input type="file" accept="audi

Html5呼叫手機攝像頭並實現人臉識別

需求 混合App開發,原生殼子+webApp,在web部分呼叫原生攝像頭功能並且在網頁指定區域顯示攝像頭內容,同時可以手動拍照並進行人臉識別,將識別結果顯示在網頁上。 技術棧 vue、Html5、video標籤、Android、IOS、百度AI 分析 1、使用navi

HTML5呼叫手機攝像頭拍照

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ http://blog.sina.com.cn/s/blog_4ad7c2540101lnak.html HTML5 The Media

H5 file呼叫手機相機相簿(相容安卓ios,親測有效)

<input id="input" type="file"/>標籤,iOS直接吊起相機拍照或是相簿選擇,但Android中只調起選擇相簿,沒有調起相機拍照 解決辦法: 只需要加上 accept="image/*" 就完美的相容安卓和IOS了(accept表示開啟的系統檔案目錄) <

html5呼叫手機攝像頭,實現拍照上傳功能

http://www.glve.net/html5-calls-cell-phone-cameras-to-achieve-photo-upload-feature.html 今天做手機網站,想實現手機掃描二維碼功能。首先實現在瀏覽器中呼叫手機攝像頭,實現拍照功能並且把拍下的照片顯示在頁面並上傳到伺服器

Vue呼叫手機相機相簿以及上傳

元件<template> <div> <input id="upload_file" type="file" style="display: none;" accept='image/*' name="file" @

HTML5呼叫手機攝像機、相簿功能

input標籤 type值為file,可以呼叫系統預設的照相機、相簿、攝像機、錄音功能。先上程式碼:<input type="file" accept="image/*" capture="camera"><input type="file" accept=

HTML5 呼叫手機攝像頭掃描二維碼

最近有個專案需要使用H5呼叫手機攝像頭掃描二維碼斌且識別。(很奇葩的需求) 百度了下找到了這個api: 舊版:(目前只有UC瀏覽器支援,其他的手機瀏覽器一律沒有反應) https://developer.mozilla.org/zh-CN/docs/Web/API/Navi

html5 file呼叫手機攝像頭

  在切圖網一個客戶的webapp專案中需要用到 html5呼叫手機攝像頭,找了很多資料,大都是 js呼叫api  然後怎樣怎樣,做了幾個demo測試發現根本不行, 後來恍然大悟,用html5自帶的 input file=""  ,純html5,並且不涉及到js ,

Android學習筆記9-呼叫攝像頭相簿

呼叫攝像頭和手機的相簿 呼叫手機的攝像頭和相機拍照的功能,在許多app中都非常常見,當我們用qq,微信,微博等app給別人分享圖片時都會用到這個功能。 1,呼叫攝像頭拍照 activity_main.xml佈局程式碼 <?xml version="1.0" enc

HTML5+呼叫手機相簿,轉碼為base64並替換元素背景圖

HTML5+ 呼叫手機相簿圖片,轉化為bas64編碼上傳並顯示。 這個方法存在一個弊端: 圖片轉碼為Base64格式時間長,上傳時間長,如果使用者在base64編碼轉換完成前,點選提交按鈕,會導致沒有上傳或者上傳有誤。 故,不建議使用。更好的方式是使用檔案上傳,見另一篇文章

HTML5呼叫手機攝像拍照、相簿等功能樣式美化及demo

最近用MUI做了個移動端專案,設計中涉及到呼叫手機攝像頭拍照等功能需求,然而在PLUS環境下才能直接呼叫,這就讓人有點頭疼了,後經查詢資料學習瞭解到有一個很簡單的方法就是input:file標籤,不需要複雜程式碼操作就能實現呼叫拍照、相簿等功能。 //capture -- 設定選擇需

(親測可用)html5 file呼叫手機攝像頭

在切圖網一個客戶的webapp專案中需要用到 html5呼叫手機攝像頭,找了很多資料,大都是 js呼叫api  然後怎樣怎樣,做了幾個demo測試發現根本不行, 後來恍然大悟,用html5自帶的 input file=""  ,純html5,並且不涉及到js ,就可以實現。

呼叫攝像頭相簿呼叫攝像頭拍照相簿中選擇圖片)

public class MainActivity extends Activity { public static final int TAKE_PHOTO=1; public static final int CROP_PHOTO=0; public static

Html5呼叫本地攝像頭

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #c

html5呼叫手機相機並壓縮、上傳

近日剛做的一個功能,要在app裡使用內嵌頁面進行影象的上傳。 從功能上看,原生的實現應該是最好的。畢竟頁面上所有的東西都隔著一個瀏覽器,所有的實現都要依賴瀏覽器提供的介面,不同的瀏覽器對介面的實現又有差異……到最後又會陷入相容性的大坑! 吐槽歸吐槽,但是折騰的勁頭不能丟! 使用input file[

H5呼叫手機攝像頭,圖片,視訊等

限制只能選擇圖片<input type="file" accept="image/*">限制只能選擇視訊<input type="file" accept="video/*">限

Android呼叫系統相機相簿

拍照和相簿的功能在實際開發中是最常見的功能,這裡記錄下。 準備工作 許可權 1234 <!-- 往SDCard寫入資料許可權 --> <uses-permission android:name="android.permission.WRIT

linux opencv呼叫手機攝像頭

手機端安裝IP攝像頭 先上原始碼: #include "cv.h" #include "highgui.h" #include <iostream> int main(int, char**) { cv::VideoCapture vcap;