最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)點(diǎn)擊圖片翻轉(zhuǎn)效果

 更新時(shí)間:2021年10月18日 09:24:26   作者:蒙奇. D. 檸檬  
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊圖片翻轉(zhuǎn)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在做一個(gè)有關(guān)人臉采集的項(xiàng)目,然后在編寫前端模塊時(shí),遇到了一個(gè)問題,就是當(dāng)客戶上傳照片或直接拍照上傳時(shí),會(huì)遇到有些圖片可能會(huì)90度翻轉(zhuǎn)過來所以,我們需要給個(gè)按鈕客戶讓客戶自己可以對(duì)照品進(jìn)行旋轉(zhuǎn)效果大致如下

圖1.正常圖片上傳

圖2.圖片左旋轉(zhuǎn)

圖3.圖片右旋轉(zhuǎn)

以上就是一個(gè)圖片旋轉(zhuǎn)功能

下面我們就開始代碼部分吧

這里我采取了一個(gè)方法,然后當(dāng)前我的圖片格式是base64,如果遇到其它格式也無所謂,因?yàn)槲覀冏罱K的效果還是要轉(zhuǎn)為image對(duì)象來實(shí)現(xiàn)的

/**
     * 圖片旋轉(zhuǎn)
     * @param direction 旋轉(zhuǎn)的方向
     */
    rotate (direction) {
      const img = new Image()
      // 這里的思維就是,把圖片映射到一個(gè)畫板上,然后對(duì)圖片進(jìn)行重新繪制,所以這里要建一個(gè)canvas對(duì)象來充當(dāng)我們的畫板
      const canvas = document.createElement('canvas')
      // base64轉(zhuǎn)換image對(duì)象
      img.src = this.uploadImage
      // 這里記得一定要在base64轉(zhuǎn)換成圖片對(duì)象后再進(jìn)行其它操作,筆者在這里踩了個(gè)坑,onload方法就是圖片加載再進(jìn)行其它操作,如果圖片是文件路徑方式跨域調(diào)用效果更加明顯
      img.onload = () => {
        // img的高度和寬度不能在img元素隱藏后獲取,否則會(huì)出錯(cuò)
        const height = img.height
        const width = img.width
        // 旋轉(zhuǎn)角度以弧度值為參數(shù)
        const ctx = canvas.getContext('2d')
        if (direction === 'right') {
          canvas.width = height
          canvas.height = width
          ctx.rotate(90 * Math.PI / 180)
          ctx.drawImage(img, 0, 0, width, -height)
        } else {
          canvas.width = height
          canvas.height = width
          ctx.rotate(-90 * Math.PI / 180)
          ctx.drawImage(img, 0, 0, -width, height)
        }
        // 旋轉(zhuǎn)后的圖片重新轉(zhuǎn)為base64
        this.uploadImage = this.getBase64Image(img, canvas)
      }
    },
    /**
    * 把image文件轉(zhuǎn)為base64
    */
    getBase64Image (img, canvas) {
      const ctx = canvas.getContext('2d')
      ctx.drawImage(img, 0, 0, img.width, img.height)
      const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
      return canvas.toDataURL('image/' + ext)
    }

注意:如果圖片是跨域獲取的話這里可能會(huì)使canvas轉(zhuǎn)回base64出現(xiàn)問題,這時(shí)可能需要開啟代理來進(jìn)行圖片獲取

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中英文字符長度統(tǒng)計(jì)方法示例【按照中文占2個(gè)字符】

    JavaScript中英文字符長度統(tǒng)計(jì)方法示例【按照中文占2個(gè)字符】

    這篇文章主要介紹了JavaScript中英文字符長度統(tǒng)計(jì)方法,涉及javascript針對(duì)中英文字符的匹配與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 一文帶你玩轉(zhuǎn)JavaScript的箭頭函數(shù)

    一文帶你玩轉(zhuǎn)JavaScript的箭頭函數(shù)

    在ES6中新增了函數(shù)的簡寫方式----箭頭函數(shù),箭頭函數(shù)的出現(xiàn)不僅簡化了大量代碼,也讓代碼看起來更加優(yōu)雅,同時(shí)也解決了this指向問題,下面我們就來詳細(xì)講解如何玩轉(zhuǎn)箭頭函數(shù)
    2022-09-09
  • ES6 Generator基本使用方法示例

    ES6 Generator基本使用方法示例

    這篇文章主要介紹了ES6 Generator基本使用方法,結(jié)合實(shí)例形式分析了ES6 Generator基本功能、使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-06-06
  • js實(shí)現(xiàn)動(dòng)態(tài)增加文件域表單功能

    js實(shí)現(xiàn)動(dòng)態(tài)增加文件域表單功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)動(dòng)態(tài)增加文件域表單功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 在html頁面上拖放移動(dòng)標(biāo)簽

    在html頁面上拖放移動(dòng)標(biāo)簽

    在html頁面上拖放移動(dòng)標(biāo)簽,需要的朋友可以參考下。
    2010-01-01
  • 使用JS實(shí)現(xiàn)在空白頁上展示出一個(gè)有趣的時(shí)鐘

    使用JS實(shí)現(xiàn)在空白頁上展示出一個(gè)有趣的時(shí)鐘

    在我們?nèi)粘5木W(wǎng)頁瀏覽中,空白的頁面往往會(huì)被視為一種無趣的事物,一片等待填充的空間,今天我們來學(xué)習(xí)一下如何使用JS在空白的網(wǎng)頁上展示出一個(gè)有趣的時(shí)鐘吧,感興趣的小伙伴跟著小編一起來看看吧
    2024-04-04
  • 基于Echarts實(shí)現(xiàn)餅圖效果

    基于Echarts實(shí)現(xiàn)餅圖效果

    這篇文章主要為大家詳細(xì)介紹了基于Echarts實(shí)現(xiàn)餅圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 微信小程序?qū)崿F(xiàn)select二級(jí)下拉

    微信小程序?qū)崿F(xiàn)select二級(jí)下拉

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)select二級(jí)下拉效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript輸出為[object?Object]問題的解決辦法

    JavaScript輸出為[object?Object]問題的解決辦法

    平時(shí)我們?cè)诮邮蘸蠖朔祷氐膉son對(duì)象通常是一個(gè)字符串類型的object,所以一般我們要對(duì)這個(gè)object進(jìn)行類型轉(zhuǎn)化后,我們才能使用object里面的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于JavaScript輸出為[object?Object]問題的解決辦法,需要的朋友可以參考下
    2023-11-11
  • JavaScript雙向鏈表實(shí)現(xiàn)LFU緩存算法

    JavaScript雙向鏈表實(shí)現(xiàn)LFU緩存算法

    本文主要介紹了JavaScript雙向鏈表實(shí)現(xiàn)LFU緩存算法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

东乌珠穆沁旗| 蒙自县| 旬邑县| 孝昌县| 卓尼县| 通许县| 五原县| 芜湖市| 临清市| 靖边县| 襄汾县| 宽城| 永昌县| 台前县| 隆回县| 鱼台县| 沭阳县| 金华市| 淄博市| 万源市| 板桥市| 长岛县| 综艺| 阳新县| 龙口市| 广饶县| 峨眉山市| 界首市| 威信县| 黄石市| 疏附县| 西畴县| 包头市| 平果县| 乌拉特前旗| 托克托县| 京山县| 阳谷县| 平湖市| 博兴县| 上饶市|