欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)過來(lái)所以,我們需要給個(gè)按鈕客戶讓客戶自己可以對(duì)照品進(jìn)行旋轉(zhuǎn)效果大致如下

圖1.正常圖片上傳

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

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

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

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

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

/**
     * 圖片旋轉(zhuǎn)
     * @param direction 旋轉(zhuǎn)的方向
     */
    rotate (direction) {
      const img = new Image()
      // 這里的思維就是,把圖片映射到一個(gè)畫板上,然后對(duì)圖片進(jìn)行重新繪制,所以這里要建一個(gè)canvas對(duì)象來(lái)充當(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í)可能需要開啟代理來(lái)進(jìn)行圖片獲取

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

相關(guān)文章

  • 詳解JavaScript之Array.reduce源碼解讀

    詳解JavaScript之Array.reduce源碼解讀

    這篇文章主要介紹了詳解JavaScript之Array.reduce源碼解讀,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • JS面試高頻單線程與事件循環(huán)深入解析

    JS面試高頻單線程與事件循環(huán)深入解析

    JavaScript是一種單線程語(yǔ)言,它在任何給定時(shí)間只能執(zhí)行一個(gè)任務(wù),然而js確能夠處理異步操作,這得益于其事件循環(huán)(Event Loop)機(jī)制,今天這篇文章帶領(lǐng)大家深入理解JavaScript單線程特性,以及講解事件循環(huán)和js多線程知識(shí)
    2023-10-10
  • javascript document.referrer 用法

    javascript document.referrer 用法

    document對(duì)象的referrer屬性,返回導(dǎo)航到當(dāng)前網(wǎng)頁(yè)的超鏈接所在網(wǎng)頁(yè)的URL。
    2009-04-04
  • 淺談js數(shù)組和splice的用法

    淺談js數(shù)組和splice的用法

    下面小編就為大家?guī)?lái)一篇淺談js數(shù)組和splice的用法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-12-12
  • javascript代碼在ie8里報(bào)錯(cuò) document.getElementById(...) 為空或不是對(duì)象的解決方法

    javascript代碼在ie8里報(bào)錯(cuò) document.getElementById(...) 為空或不是對(duì)象的解決方

    今天更升級(jí)了ie8,發(fā)現(xiàn)原來(lái)在ie7下可以運(yùn)行的代碼,不能運(yùn)行了,發(fā)現(xiàn)了一些細(xì)節(jié),附臨時(shí)修改辦法。
    2009-11-11
  • JavaScript計(jì)算出現(xiàn)精度丟失問題的解決方法

    JavaScript計(jì)算出現(xiàn)精度丟失問題的解決方法

    Javascript作為一門大型編程語(yǔ)言,在日常開發(fā)中難免會(huì)涉及到大量的數(shù)學(xué)計(jì)算,然而,浮點(diǎn)數(shù)在計(jì)算過程中可能出現(xiàn)精度的問題,下面我們就來(lái)學(xué)習(xí)一下Javascript中高精度計(jì)算及其相關(guān)知識(shí)吧
    2023-11-11
  • hash特點(diǎn)、hashchange事件介紹及其常見應(yīng)用場(chǎng)景

    hash特點(diǎn)、hashchange事件介紹及其常見應(yīng)用場(chǎng)景

    淺析hash特點(diǎn)、hashchange事件介紹及其常見應(yīng)用場(chǎng)景(不同hash對(duì)應(yīng)不同事件處理、移動(dòng)端大圖展示狀態(tài)后退頁(yè)面問題、原生輕應(yīng)用頭部后退問題、移動(dòng)端自帶返回按鈕二次確認(rèn)問題),hashchange和popstate事件觸發(fā)條件
    2023-11-11
  • 基于JavaScript實(shí)現(xiàn)帶數(shù)據(jù)驗(yàn)證和復(fù)選框的表單提交

    基于JavaScript實(shí)現(xiàn)帶數(shù)據(jù)驗(yàn)證和復(fù)選框的表單提交

    這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)帶數(shù)據(jù)驗(yàn)證和復(fù)選框的表單提交功能,需要的朋友可以參考下
    2017-08-08
  • 微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法

    微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法

    這篇文章主要介紹了微信小程序中使用Async-await方法異步請(qǐng)求變?yōu)橥秸?qǐng)求方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • JavaScript中操作字符串小結(jié)

    JavaScript中操作字符串小結(jié)

    字符串在javascript中幾乎無(wú)處不在,在你處理用戶的輸入數(shù)據(jù)的時(shí)候,在讀取或設(shè)置DOM對(duì)象的屬性時(shí),在操作cookie時(shí),當(dāng)然還有更多...。JavaScript的核心部分提供了一組屬性和方法用于通用的字符串操作,如分割字符串,改變字符串的大小寫,操作子字符串等。
    2015-05-05

最新評(píng)論