第一種是HTML方法
<label> <input style="opacity: 0;" type="file" accept="image/*" id="head_img_change"/> <img id="headimg" src="img/erma_search_goods_detail.png"> </label>
1 $(function(){ 2 3 $("#head_img_change").change(function() { 4 var $file = $(this); 5 var fileObj = $file[0]; 6 var windowURL = window.URL || window.webkitURL; 7 var dataURL; 8 var $img = $("#headimg"); 9 if(fileObj && fileObj.files && fileObj.files[0]){ 10 dataURL = windowURL.createObjectURL(fileObj.files[0]); 11 $img.attr('src',dataURL); 12 }else{ 13 dataURL = $file.val(); 14 var imgObj = document.getElementById("headimg"); 15 // 1、在設置filter屬性時,元素必須已經存在在DOM樹中,動態創建的Node,也需要在設置屬性前加入到DOM中,先設置屬性再加入,無效; 16 // 2、src屬性需要像下面的方式添加,上面的兩種方式添加,無效; 17 imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)"; 18 imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL; 19 } 20 }); 21 22 })
說明:1)外部加個label是為了把讓用戶點擊的時候在范圍內的都會觸發input
2)H5 input file上傳圖片,調用API:<input type="file" accept="image/*;capture=camera">直接調用相機
<input type="file" accept="image/*" />調用相機、圖片或者相冊
注:部分android機只能調用本地相冊,相機調用不了或者只能調用相機,不能調用相冊。
3)此方法是網上的一種方法,做了兼容的,IE6以上都能正常運行。
第二種為MUI方法
1)內容鏈接:http://www.bcty365.com/content-146-3648-1.html
2)需要改一下 點擊頭像觸發 里的
拍照觸發的對象的ID名改成自己的就行了。
還需要修改一下 上傳圖片 里的一點代碼就可以用了:
var mainImage= document.getElementById("headimg");
mainImage.src = imgPath;
說明:這一部分改成上面的那兩句就可以了,因為我原來放圖片的地方設置有寬高,mainImage給它一個裝圖片的對象就行了。
1 //拍照觸發監聽 2 document.getElementById("changeimg").addEventListener("tap", function() { 3 if (mui.os.plus) { 4 5 var a = [ 6 { title: "拍照" }, 7 { title: "從手機相冊選擇" } 8 ] 9 10 plus.nativeUI.actionSheet({ 11 title: "修改用戶頭像", 12 cancel: "取消", 13 buttons: a 14 }, function(b) { //actionsheet 點擊之后出現的東西 15 switch (b.index) { 16 case 0: 17 break; 18 case 1: 19 getpic(); 20 break; 21 case 2: 22 getimg(); 23 break; 24 default: 25 break; 26 } 27 }) 28 } 29 }) 30 //拍照 31 function getpic() { 32 var c = plus.camera.getCamera(); 33 c.captrueImage(function(e) { 34 plus.io.resolveLocalFileSystemURL(e, function(entry) { 35 var s = entry.toLocalURL() + "?version=" + new Date().getTime(); 36 uploadHead(s); //上傳圖片 37 }, function(e) { 38 console.log("讀取拍照文件錯誤" + e.message) 39 }) 40 }, function(s) { 41 console.log("error" + s); 42 }, { 43 filname: "_doc/head.png" 44 }) 45 } 46 47 //獲取相冊 48 function getimg() { 49 plus.gallery.pick(function(a) { 50 plus.io.resolveLocalFileSystemURL(a, function(entry) { 51 plus.io.resolveLocalFileSystemURL("_doc/", function(root) { 52 root.getFile("head.png", {}, function(file) { 53 //文件已存在 54 file.remove(function() { 55 console.log("刪除成功"); 56 entry.copyTo(root, "head.png", function(e) { 57 var e = e.fullPath + "?version=" + new Date().getTime(); 58 uploadHead(e); /*上傳圖片*/ 59 //變更大的圖預覽的src 60 //目前只有一張圖暫且這樣處理,后續需要用標准組件實現 61 }, function(e) { 62 console.log("copy img file:" + e.message); 63 }); 64 }, function() { 65 console.log("刪除" + e.message) 66 }); 67 }, function() { 68 //文件不存在 69 entry.copyTo(root, "head.png", function(e) { 70 var path = e.fullPath + "?version=" + new Date().getTime(); 71 uploadhead(path); /*上傳圖片*/ 72 }, function(e) { 73 console.log("copy img file:" + e.message); 74 }); 75 }); 76 }, function(e) { 77 console.log("get _www folder fail"); 78 }) 79 }, function(e) { 80 console.log("讀取拍照文件錯誤" + e.message); 81 }) 82 }, function(a) {}, { 83 filter: "image" 84 }) 85 } 86 //上傳頭像圖片 87 function uploadHead(imgPath) { 88 var mainImage = document.getElementById("headimg"); 89 mainImage.src = imgPath; 90 91 var image = new Image(); 92 image.src = imgPath; 93 image.onload = function() { 94 var imgData = getBase64Image(image); 95 96 $.ajax({ 97 type: "post", 98 data: imgData, 99 url: "http://10.8.165.31/ceshi/reuserimg.php", 100 success: function(data) { 101 console.log("ajax成功") 102 console.log(data); 103 }, 104 error: function() { 105 console.log("ajax失敗") 106 } 107 }); 108 } 109 } 110 111 112 //轉換64 113 function getBase64Image(img) { 114 var canvas = document.createDocument("canvas"); 115 var width = img.width; 116 var height = img.height; 117 118 if (width > height) { 119 if (width > 100) { 120 height = Math.round(height *= 100 / width); 121 width = 100; 122 } 123 } else { 124 if (height > 100) { 125 width = Math.round(width *= 100 / height); 126 height = 100; 127 } 128 } 129 130 canvas.width = width; 131 canvas.height = height; 132 133 var ctx = canvas.getContext("2d"); 134 ctx.drawImage(img, 0, 0, width, height); /*繪圖*/ 135 var dataURL = canvas.toDataURL("image/png", 0.8); 136 return dataURL.replace("data:image/png;base64,", ""); 137 138 }