亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)碼照片Exif - Orientation 自動修正解決方案

cnsworder / 3374人閱讀

摘要:使用自動修正數(shù)碼照片使用場景,在做朋友圈時,時常遇到需要用戶拍照上傳圖片需求,但是在一些手機(jī)上拍出來的照片會出現(xiàn)奇怪的旋轉(zhuǎn)角度來呈現(xiàn)。

使用Canvas + exif-js自動修正數(shù)碼照片

使用場景,在做朋友圈 H5 時,時常遇到需要用戶拍照上傳圖片需求,但是在一些手機(jī)(iso)上拍出來的照片會出現(xiàn)奇怪的旋轉(zhuǎn)角度來呈現(xiàn)。經(jīng)過各種百度才發(fā)現(xiàn)相機(jī)拍出來的圖片擁有很多屬性,其中一項(xiàng)是Orientation ,用于記錄拍攝時相機(jī)物理旋轉(zhuǎn)角度,例如把相機(jī)倒過來Orientation3,順時針豎起來Orientation6,逆時針豎起來Orientation8,正常模式Orientation1。根據(jù)這個屬性我們可以使用Canvas來對圖片重繪。

Orientation 示意圖

Show Code
import EXIF from "exif-js"; // 引入依賴插件

// 參數(shù)列表:img 對象,callback返回Base64圖片編碼,生成圖片質(zhì)量默認(rèn)值0.9
export const FixImg = (img, callback, quality = 0.9) => {
    
  let Orientation, ctxWidth, ctxHeight, base64; // 定義所需變量

  EXIF.getData(img, function() {
    Orientation = EXIF.getTag(this, "Orientation");
    ctxWidth = this.naturalWidth;
    ctxHeight = this.naturalHeight;
    
    console.log(Orientation, ctxWidth, ctxHeight);

    var canvas = document.createElement("canvas");
    var ctx = canvas.getContext("2d");

    canvas.width = ctxWidth;
    canvas.height = ctxHeight;
    if ([5, 6, 7, 8].includes(Orientation)) {
      canvas.width = ctxHeight;
      canvas.height = ctxWidth;
    }

    switch (Orientation) {
      case 2:
        ctx.transform(-1, 0, 0, 1, ctxWidth, 0);
        break;
      case 3:
        ctx.transform(-1, 0, 0, -1, ctxWidth, ctxHeight);
        break;
      case 4:
        ctx.transform(1, 0, 0, -1, 0, ctxHeight);
        break;
      case 5:
        ctx.transform(0, 1, 1, 0, 0, 0);
        break;
      case 6:
        ctx.transform(0, 1, -1, 0, ctxHeight, 0);
        break;
      case 7:
        ctx.transform(0, -1, -1, 0, ctxHeight, ctxWidth);
        break;
      case 8:
        ctx.transform(0, -1, 1, 0, 0, ctxWidth);
        break;
      default:
        ctx.transform(1, 0, 0, 1, 0, 0);
    }

    ctx.drawImage(img, 0, 0, ctxWidth, ctxHeight);
    
    // 默認(rèn)輸出jpeg,也可以讀取原圖片格式,最后輸出原圖格式,搜索關(guān)鍵詞 :File.type
    base64 = canvas.toDataURL("image/jpeg", quality); 
    callback(base64);
  });
};

性感照騙,在線修復(fù): http://peichenhu.cn/demo/awesome/#/Exif

相關(guān)補(bǔ)充:從圖片 Exif 信息中取到 Orientation 后,就可以根據(jù)它來自動旋轉(zhuǎn)圖片了,canvas、filter 濾鏡、vml、css3 都可以實(shí)現(xiàn)圖片的旋轉(zhuǎn)。
參考文章:https://imququ.com/post/how-t...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107965.html

相關(guān)文章

  • web端上傳圖片時 圖片被旋轉(zhuǎn)問題

    摘要:有些時候在端上傳圖片會遇到這種情況,正向的圖片,上傳預(yù)覽時就被旋轉(zhuǎn)了。在使用或者其他軟件旋轉(zhuǎn)圖片時,圖片旋轉(zhuǎn)了,但不會改變,由于我們使用的圖片預(yù)覽器能夠預(yù)處理圖片,使其看起來與旋轉(zhuǎn)后一致,但上傳圖片時,瀏覽器并不會預(yù)處理。 有些時候在web端上傳圖片會遇到這種情況,正向的圖片,上傳預(yù)覽時就被旋轉(zhuǎn)了。 showImg(https://segmentfault.com/img/bVbhxd...

    CastlePeaK 評論0 收藏0
  • 解決移動端iOS下上傳圖片被旋轉(zhuǎn)問題。

    摘要:下上傳圖片被旋轉(zhuǎn)解決方法用既然是解決問題,那就簡單說一下,直接上代碼方式使用在上可以直接調(diào)用照相機(jī)拍照,豎拍出來的圖片都會變成橫圖思路獲取到照片拍攝的方向角,對非橫拍的照片使用的進(jìn)行角度旋轉(zhuǎn)修正。 iOS下html上傳圖片被旋轉(zhuǎn) 解決方法用exif.js+canvas既然是解決問題,那就簡單說一下,直接上代碼! html方式使用在iOS上可以直接調(diào)用照相機(jī)拍照,豎拍出來的圖片都會變成橫...

    zhunjiee 評論0 收藏0
  • 移動端圖片上傳旋轉(zhuǎn)、壓縮的解決方案

    摘要:上傳的文件經(jīng)過就可以實(shí)現(xiàn)預(yù)覽圖片了,這方面不清楚的可以查看進(jìn)階系列文件上傳下載旋轉(zhuǎn)旋轉(zhuǎn)需要用到的方法。 前言 在手機(jī)上通過網(wǎng)頁 input 標(biāo)簽拍照上傳圖片,有一些手機(jī)會出現(xiàn)圖片旋轉(zhuǎn)了90度d的問題,包括 iPhone 和個別三星手機(jī)。這些手機(jī)豎著拍的時候才會出現(xiàn)這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機(jī)拍照角度來對照片進(jìn)行旋轉(zhuǎn),從而解決這個問題。 Orientatio...

    blair 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<