做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

移動端圖片上傳旋轉、壓縮問題的方法

來源:懂視網 責編:小采 時間:2020-11-27 22:06:17
文檔

移動端圖片上傳旋轉、壓縮問題的方法

移動端圖片上傳旋轉、壓縮問題的方法:前言 在手機上通過網頁 input 標簽拍照上傳圖片,有一些手機會出現圖片旋轉了90度d的問題,包括 iPhone 和個別三星手機。這些手機豎著拍的時候才會出現這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機拍照角度來對照片進行旋轉,從而解決這個問
推薦度:
導讀移動端圖片上傳旋轉、壓縮問題的方法:前言 在手機上通過網頁 input 標簽拍照上傳圖片,有一些手機會出現圖片旋轉了90度d的問題,包括 iPhone 和個別三星手機。這些手機豎著拍的時候才會出現這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機拍照角度來對照片進行旋轉,從而解決這個問

前言

在手機上通過網頁 input 標簽拍照上傳圖片,有一些手機會出現圖片旋轉了90度d的問題,包括 iPhone 和個別三星手機。這些手機豎著拍的時候才會出現這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機拍照角度來對照片進行旋轉,從而解決這個問題。

Orientation

這個參數并不是所有圖片都有的,不過手機拍出來的圖片是帶有這個參數的。

旋轉角度 參數值
1
順時針90° 6
逆時針90° 8
180° 3

參數為 1 的時候顯示正常,那么在這些橫拍顯示正常,即 Orientation = 1 的手機上,豎拍的參數為 6。

想要獲取 Orientation 參數,可以通過 exif.js 庫來操作。exif.js 功能很多,體積也很大,未壓縮之前足足有 30k,這對手機頁面加載來說是非常大影響的。而我只需要獲取 Orientation 信息而已,所以我這里刪減了 exif.js 庫的一些代碼,將代碼縮小到幾KB。

exif.js 獲取 Orientation :

EXIF.getData(file, function() { 
 var Orientation = EXIF.getTag(this, 'Orientation');
});

file 則是 input 文件表單上傳的文件。上傳的文件經過 fileReader.readAsDataURL(file) 就可以實現預覽圖片了,這方面不清楚的可以查看:HTML5 進階系列:文件上傳下載

旋轉

旋轉需要用到 canvas 的 rotate() 方法。

ctx.rotate(angle);

rotate 方法的參數為旋轉弧度。需要將角度轉為弧度:degrees * Math.PI / 180

旋轉的中心點默認都在 canvas 的起點,即 ( 0, 0 )。旋轉的原理如下圖:

旋轉之后,如果從 ( 0, 0 ) 點進行 drawImage(),那么畫出來的位置就是在左圖中的旋轉 90 度后的位置,不在可視區域呢。旋轉之后,坐標軸也跟著旋轉了,想要顯示在可視區域呢,需要將 ( 0, 0 ) 點往 y 軸的反方向移 y 個單位,此時的起始點則為 ( 0, -y )。

同理,可以獲得旋轉 -90 度后的起始點為 ( -x, 0 ),旋轉 180 度后的起始點為 ( -x, -y )。

壓縮

手機拍出來的照片太大,而且使用 base64 編碼的照片會比原照片大,那么上傳的時候進行壓縮就非常有必要的。現在的手機像素這么高,拍出來的照片寬高都有幾千像素,用 canvas 來渲染這照片的速度會相對比較慢。

因此第一步需要先對上傳照片的寬高做限制,判斷寬度或高度是否超出哪個范圍,則等比壓縮其寬高。

var ratio = width / height;if(imgWidth > imgHeight && imgWidth > xx){
 imgWidth = xx;
 imgHeight = Math.ceil(xx / ratio);
}else if(imgWidth < imgHeight && imgHeight > yy){
 imgWidth = Math.ceil(yy * ratio);
 imgHeight = yy;
}

第二步就通過 canvas.toDataURL() 方法來壓縮照片質量。

canvas.toDataURL("image/jpeg", 1);

toDataURL() 方法返回一個包含圖片展示的 data URI 。使用兩個參數,第一個參數為圖片格式,默認為 image/png。第二個參數為壓縮質量,在指定圖片格式為 image/jpeg 或 image/webp的情況下,可以從 0 到 1 的區間內選擇圖片的質量。

總結

綜合以上,例子的代碼包括精簡的exif.js庫地址:file-demo

主要的核心代碼如下:

<input type="file" id="files" ><img src="blank.gif" id="preview">
<script src="small-exif.js"></script>
<script>
 var ipt = document.getElementById('files'),
 img = document.getElementById('preview'),
 Orientation = null;
 ipt.onchange = function () { 
 var file = ipt.files[0],
 reader = new FileReader(),
 image = new Image(); 
 if(file){
 EXIF.getData(file, function() { 
 Orientation = EXIF.getTag(this, 'Orientation');
 });
 reader.onload = function (ev) {
 image.src = ev.target.result;
 image.onload = function () { 
 var imgWidth = this.width,
 imgHeight = this.height; // 控制上傳圖片的寬高 
 if(imgWidth > imgHeight && imgWidth > 750){
 imgWidth = 750;
 imgHeight = Math.ceil(750 * this.height / this.width);
 }else if(imgWidth < imgHeight && imgHeight > 1334){
 imgWidth = Math.ceil(1334 * this.width / this.height);
 imgHeight = 1334;
 } 
 var canvas = document.createElement("canvas"),
 ctx = canvas.getContext('2d');
 canvas.width = imgWidth;
 canvas.height = imgHeight; 
 if(Orientation && Orientation != 1){
 switch(Orientation){ 
 case 6: // 旋轉90度
 canvas.width = imgHeight; 
 canvas.height = imgWidth; 
 ctx.rotate(Math.PI / 2); 
 // (0,-imgHeight) 從旋轉原理圖那里獲得的起始點
 ctx.drawImage(this, 0, -imgHeight, imgWidth, imgHeight); 
 break; 
 case 3: // 旋轉180度
 ctx.rotate(Math.PI); 
 ctx.drawImage(this, -imgWidth, -imgHeight, imgWidth, imgHeight); 
 break; 
 case 8: // 旋轉-90度
 canvas.width = imgHeight;
 canvas.height = imgWidth; 
 ctx.rotate(3 * Math.PI / 2);
 ctx.drawImage(this, -imgWidth, 0, imgWidth, imgHeight);
 break;
 }
 }else{
 ctx.drawImage(this, 0, 0, imgWidth, imgHeight);
 }
 img.src = canvas.toDataURL("image/jpeg", 0.8);
 }
 }
 reader.readAsDataURL(file);
 }
}</script>

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

移動端圖片上傳旋轉、壓縮問題的方法

移動端圖片上傳旋轉、壓縮問題的方法:前言 在手機上通過網頁 input 標簽拍照上傳圖片,有一些手機會出現圖片旋轉了90度d的問題,包括 iPhone 和個別三星手機。這些手機豎著拍的時候才會出現這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機拍照角度來對照片進行旋轉,從而解決這個問
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 泰和县| 东乡族自治县| 宁陵县| 友谊县| 宣汉县| 鄂温| 吴桥县| 樟树市| 建德市| 金门县| 鹰潭市| 福清市| 望江县| 正蓝旗| 如皋市| 枞阳县| 伊春市| 甘南县| 衡水市| 盐亭县| 开平市| 林州市| 高淳县| 泾阳县| 界首市| 天柱县| 霍邱县| 富平县| 垦利县| 昌黎县| 凤冈县| 通辽市| 昂仁县| 巴东县| 翁牛特旗| 盐边县| 赣榆县| 延边| 淮阳县| 固原市| 即墨市|