當前位置:首頁 » 文件管理 » js上傳手機圖片

js上傳手機圖片

發布時間: 2025-10-08 00:52:26

㈠ 怎麼用html5或js調用手機的攝像頭拍照上傳以及調用手機相冊選取照片

1、實現頭的方法代碼。

注意事項:

JavaScript是一種網路腳本語言,在web應用開發中得到了廣泛的應用,它經常被用來為網頁添加各種動態功能,為用戶提供更加流暢美觀的瀏覽效果,通常JavaScript腳本被嵌入到HTML中來實現自己的功能。

㈡ 拍照或從文件夾里上傳圖片(重復上傳同一張圖片失效的解決辦法)

HTML:

<!--添加-->

<div  class="dianji" @click="triggerUpload">添加圖片</div>

<input type="file" id="upload" accept="image/*;capture=camera" value="" @change="upload">

JS:

triggerUpload() { //觸發input的點擊事件,用戶選擇圖片進行上傳

    document.getElementById("upload").click();

},

//上傳圖片

upload(e) {

let self = this;

let file = e.target.files[0] || e.dataTransfer.files[0];

let Orientation;

//去獲取拍照時的信息,解決拍出來的照片旋轉問題

Exif.getData(file, function() {

Orientation = Exif.getTag(this, 'Orientation');

});

// 看支持不支持FileReader

if(!file || !window.FileReader) return;

if(/^image/.test(file.type)) {

// 創建一個reader

let reader = new FileReader();

// 將圖片2將轉成 base64 格式

reader.readAsDataURL(file);

// 讀取成功後的回調

reader.onloadend = function() {

let result = this.result;

let img = new Image();

img.src = result;

e.target.value='';//input file 重復上傳同一張圖片失效的解決辦法

let uploadImagesItem = {

msrc: this.result,

src: this.result,

Attachmentid: 0,

Newfilename: this.result

};

//現在是判斷圖片是否大於250k,是就直接上傳,反之壓縮圖片

if(this.result.length <= (250 * 1024)) {

self.uploadImages.push(uploadImagesItem);

self.postImg(this.result); //提交圖片到後台

} else {

img.onload = function() {

uploadImagesItem = {

msrc: self.compress(img, Orientation),

src: self.compress(img, Orientation),

Attachmentid: 0,

Newfilename: self.compress(img, Orientation)

};

self.uploadImages.push(uploadImagesItem);

let data = self.compress(img, Orientation);

self.postImg(data);

}

}

}

}

},

postImg() {

//這里寫介面

},

//旋轉照片, 利用exif.js解決ios手機上傳豎拍照片旋轉90度問題

rotateImg(img, direction, canvas) {

//最小與最大旋轉方向,圖片旋轉4次後回到原方向

const min_step = 0;

const max_step = 3;

if(img == null) return;

//img的高度和寬度不能在img元素隱藏後獲取,否則會出錯

let height = img.height;

let width = img.width;

let step = 2;

if(step == null) {

step = min_step;

}

if(direction == 'right') {

step++;

//旋轉到原位置,即超過最大值

step > max_step && (step = min_step);

} else {

step--;

step < min_step && (step = max_step);

}

//旋轉角度以弧度值為參數

let degree = step * 90 * Math.PI / 180;

let ctx = canvas.getContext('2d');

switch(step) {

case 0:

canvas.width = width;

canvas.height = height;

ctx.drawImage(img, 0, 0);

break;

case 1:

canvas.width = height;

canvas.height = width;

ctx.rotate(degree);

ctx.drawImage(img, 0, -height);

break;

case 2:

canvas.width = width;

canvas.height = height;

ctx.rotate(degree);

ctx.drawImage(img, -width, -height);

break;

case 3:

canvas.width = height;

canvas.height = width;

ctx.rotate(degree);

ctx.drawImage(img, -width, 0);

break;

}

},

//壓縮圖片

compress(img, Orientation) {

let canvas = document.createElement("canvas");

let ctx = canvas.getContext('2d');

//瓦片canvas

let tCanvas = document.createElement("canvas");

let tctx = tCanvas.getContext("2d");

let initSize = img.src.length;

let width = img.width;

let height = img.height;

//如果圖片大於四百萬像素,計算壓縮比並將大小壓至400萬以下

let ratio;

if((ratio = width * height / 4000000) > 1) {

console.log("大於400萬像素")

ratio = Math.sqrt(ratio);

width /= ratio;

height /= ratio;

} else {

ratio = 1;

}

canvas.width = width;

canvas.height = height;

//        鋪底色

ctx.fillStyle = "#fff";

ctx.fillRect(0, 0, canvas.width, canvas.height);

//如果圖片像素大於100萬則使用瓦片繪制

let count;

if((count = width * height / 1000000) > 1) {

console.log("超過100W像素");

count = ~~(Math.sqrt(count) + 1); //計算要分成多少塊瓦片

//            計算每塊瓦片的寬和高

let nw = ~~(width / count);

let nh = ~~(height / count);

tCanvas.width = nw;

tCanvas.height = nh;

for(let i = 0; i < count; i++) {

for(let j = 0; j < count; j++) {

tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio, nh * ratio, 0, 0, nw, nh);

ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);

}

}

} else {

ctx.drawImage(img, 0, 0, width, height);

}

//修復ios上傳圖片的時候 被旋轉的問題

if(Orientation != "" && Orientation != 1) {

switch(Orientation) {

case 6: //需要順時針(向左)90度旋轉

this.rotateImg(img, 'left', canvas);

break;

case 8: //需要逆時針(向右)90度旋轉

this.rotateImg(img, 'right', canvas);

break;

case 3: //需要180度旋轉

this.rotateImg(img, 'right', canvas); //轉兩次

this.rotateImg(img, 'right', canvas);

break;

}

}

//進行最小壓縮

let ndata = canvas.toDataURL('image/jpeg', 0.1);

console.log('壓縮前:' + initSize);

console.log('壓縮後:' + ndata.length);

console.log('壓縮率:' + ~~(100 * (initSize - ndata.length) / initSize) + "%");

tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;

return ndata;

},

熱點內容
我的世界中國版好的租賃伺服器 發布:2025-10-08 03:14:30 瀏覽:938
獵手小兵的密碼是什麼 發布:2025-10-08 02:53:35 瀏覽:252
ftp下載資源 發布:2025-10-08 02:33:15 瀏覽:516
linkedlist源碼分析 發布:2025-10-08 02:30:47 瀏覽:244
eclipseandroidndk 發布:2025-10-08 02:10:38 瀏覽:384
linux被外網訪問 發布:2025-10-08 02:03:30 瀏覽:499
演算法就是編程 發布:2025-10-08 01:46:50 瀏覽:242
獨立ip伺服器香港 發布:2025-10-08 01:46:40 瀏覽:618
百度登錄源碼 發布:2025-10-08 01:00:48 瀏覽:800
默認啟動linux 發布:2025-10-08 00:52:37 瀏覽:462