1、實現(xiàn)頭的方法代碼。
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了柘城免費建站歡迎大家使用!
2、編寫CSS樣式的方法代碼。
3、html上傳代碼。
4、JS處理方法代碼。
5、測試結果如下。
注意事項:
JavaScript是一種網(wǎng)絡腳本語言,在web應用開發(fā)中得到了廣泛的應用,它經(jīng)常被用來為網(wǎng)頁添加各種動態(tài)功能,為用戶提供更加流暢美觀的瀏覽效果,通常JavaScript腳本被嵌入到HTML中來實現(xiàn)自己的功能。
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
function?showPics(url,name){??????????
//根據(jù)路徑讀取到文件???
plus.io.resolveLocalFileSystemURL(url,function(entry){??
entry.file(?function(file){??
var?fileReader?=?new?plus.io.FileReader();??
fileReader.readAsDataURL(file);??
span?style="white-space:pre"???/span???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?+=?'divimg?src="'+picUrl+'"?class="upload_img"?style="width:100%;height:100%;"http://div';??
html?+=?'/div';??
html?+=?$("#image-list").html();??
$("#image-list").html(html);???
span?style="white-space:pre"???/span}??
});??
});???
}??
//壓縮圖片????
function?compressImage(url,filename){????
var?name="_doc/upload/"+filename;??
plus.zip.compressImage({????
src:url,//src:?(String?類型?)壓縮轉(zhuǎn)換原始圖片的路徑????
dst:name,//壓縮轉(zhuǎn)換目標圖片的路徑????
quality:40,//quality:?(Number?類型?)壓縮圖片的質(zhì)量.取值范圍為1-100????
overwrite:true//overwrite:?(Boolean?類型?)覆蓋生成新文件????
},????
function(zip)?{??
//頁面顯示圖片??
showPics(zip.target,name);??
},function(error)?{????
plus.nativeUI.toast("壓縮圖片失敗,請稍候再試");????
});????
}???
//調(diào)用手機攝像頭并拍照??
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"????
});????
}??
//點擊事件,彈出選擇攝像頭和相冊的選項??
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();????
}????
}????
);????
}
首先是html代碼,很簡單,就是給一個添加按鈕,點擊觸發(fā)事件
其次方法共分為5個方法 看第二段JS代碼
先簡單的添加需要的控件
video id="video" autoplay=""style='width:640px;height:480px'/video
button id='picture'PICTURE/button
canvas id="canvas" width="640" height="480"/canvas
并在script中定義
var video = document.getElementById("video");
var context = canvas.getContext("2d")
var errocb = function () {
console.log('sth wrong!');
}
然后,簡單的說就是利用html5的api navigator.getUserMedia來開啟設備的攝像頭,瀏覽器上會出現(xiàn)圖示中的提示
if (navigator.getUserMedia) { // 標準的API
navigator.getUserMedia({ "video": true }, function (stream) {
video.src = stream;
video.play();
}, errocb);
} else if (navigator.webkitGetUserMedia) { // WebKit 核心的API
navigator.webkitGetUserMedia({ "video": true }, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errocb);
}
網(wǎng)上有些例子中,navigator.getUserMedia第一個參數(shù)是‘video’,這可能是早期的版本,現(xiàn)在必須是obj
還有關于getUserMedia和webkitGetUserMedia 的判斷,網(wǎng)上有這么寫的
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
但要注意,他們綁定video.src的方法不一樣,偶沒有測過createObjectURL是否通用
拍照功能就是簡單的調(diào)用canvas中的drawImage即可
document.getElementById("picture").addEventListener("click", function () {
context.drawImage(video, 0, 0, 640, 480);
});
HTML5技術支持WebApp在手機上拍照,顯示在頁面上并上傳到服務器。這是手機微博應用中常見的功能,當然你也可以在其它類型應用中適當使用此技術。
1、 視頻流
HTML5 的 The Media Capture(媒體捕捉) API 提供了對攝像頭的可編程訪問,用戶可以直接用 getUserMedia(請注意目前僅Chrome和Opera支持)獲得攝像頭提供的視頻流。我們需要做的是添加一個HTML5 的 Video 標簽,并將從攝像頭獲得的視頻作為這個標簽的輸入來源。
video id=”video” autoplay=”"/video
script
var video_element=document.getElementById(‘video’);
if(navigator.getUserMedia){ // opera應使用opera.getUserMedianow
navigator.getUserMedia(‘video’,success,error); //success是回調(diào)函數(shù),當然你也可以直接在此寫一個匿名函數(shù)
}
function success(stream){
video_element.src=stream;
}
/script
此時,video 標簽內(nèi)將顯示動態(tài)的攝像視頻流。下面需要進行拍照了。
2、 拍照
拍照是采用HTML5的Canvas功能,實時捕獲Video標簽的內(nèi)容,因為Video元素可以作為Canvas圖像的輸入,所以這一點很好實現(xiàn)。主要代碼如下:
var canvas=document.createElement(‘canvas’); //動態(tài)創(chuàng)建畫布對象
var ctx=canvas.getContext(’2d’);
var cw=vw,ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //將video對象內(nèi)指定的區(qū)域捕捉繪制到畫布上指定的區(qū)域,可進行不等大不等位的繪制。
document.body.append(canvas);
3、 圖片獲取
從Canvas獲取圖片數(shù)據(jù)的核心思路是用canvas的toDataURL將Canvas的數(shù)據(jù)轉(zhuǎn)換為base64位編碼的PNG圖像,類似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);
這樣,imgData變量就存儲了一長串的字符數(shù)據(jù)內(nèi)容,表示的就是一個PNG圖像的base64編碼。因為真正的圖像數(shù)據(jù)是base64編碼逗號之后的部分,所以要讓實際服務器接收的圖像數(shù)據(jù)應該是這部分,我們可以用兩種辦法來獲取。
第一種:是在前端截取22位以后的字符串作為圖像數(shù)據(jù),例如:
var data=imgData.substr(22);
如果要在上傳前獲取圖片的大小,可以使用:
var length=atob(data).length; //atob 可解碼用base-64解碼的字串
第二種:是在后端獲取傳輸?shù)臄?shù)據(jù)后用后臺語言截取22位以后的字符串(也就是在前臺略過上面這步直接上傳)。例如PHP里:
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
4、 圖片上傳
在前端可以使用Ajax將上面獲得的圖片數(shù)據(jù)上傳到后臺腳本。例如使用jQuery時可以用:
$.post(‘upload.php’,{‘data’:data});
在后臺我們用PHP腳本接收數(shù)據(jù)并存儲為圖片。
function convert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
function save_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}
以上的解決方案不僅能用于Web App拍照上傳,也可以通過Canvas的編輯功能函數(shù)提供圖片編輯,例如裁剪、上色、涂鴉、圈點等功能,然后把用戶編輯完的圖片上傳保存到服務器上。
在還在不斷補充修正的HTML5的驅(qū)動下,Web App與Native App之間的距離將越來越小。在可預見的不遠的未來,越來越多老的和新的開發(fā)項目必將會遷移到WEB應用上來。
相關規(guī)范:
The MediaCapture API:
Canvas:
需要加載cordova.js
方法:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
pictureSource = navigator.camera.PictureSourceType;
destinationType = navigator.camera.DestinationType;
}
//相冊
function fromCamera()
{
var source = pictureSource.PHOTOLIBRARY;
navigator.camera.getPicture(function (imageData) {
setimg(imageData);
}, function (message) {
if (source == pictureSource.CAMERA)
alert('加載照相機出錯!' + message);
else
alert('加載相冊出錯!' + message);
}, {
quality: 50,
destinationType: destinationType.FILE_URI,
sourceType: source
});
}
//拍照
function EditImgPz()
{
navigator.camera.getPicture(function (imageData) {
setimg(imageData);
}, function (message) {
alert(message);
}, {
quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA,
allowEdit: true,
encodingType: Camera.EncodingType.JPEG,
popoverOptions: CameraPopoverOptions,
saveToPhotoAlbum: true
});
}
你給的網(wǎng)頁用的是 input accept="image/*" type="file",在IOS端點擊時會提示選擇圖片或相機,安卓端要看瀏覽器對這兩個屬性的優(yōu)化,部分瀏覽器會直接跳轉(zhuǎn)到資源管理器,優(yōu)化做得好的可以直接提示選擇相冊或相機。
移動設備和桌面電腦上的客戶端API起初并不是同步的。最初總是移動設備上先擁有某些功能和相應的API,但慢慢的,這些API會出現(xiàn)在桌面電腦上。其中一個應用接口技術就是getUserMedia API,它能讓應用開發(fā)者訪問用戶的攝像頭或內(nèi)置相機。