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

JS實現(xiàn)圖片元素轉BASE64編碼的簡單示例

 更新時間:2023年12月26日 11:14:05   作者:集成顯卡  
在Web開發(fā)中,我們經(jīng)常需要將圖片轉換為Base64格式,以便在不依賴外部資源的情況下直接在HTML中使用,在這篇文章中,我將向您展示如何使用JavaScript將圖片元素轉BASE64編碼,需要的朋友可以參考下

這里分享前端實現(xiàn)圖片轉 BASE64 的通用方法,支持縮放、灰度處理。

/**
* 將指定元素對象轉換為 Base64 格式
* @param {HTMLImageElement|String} img - 圖片元素(如通過 document.querySelector 獲取)或者選擇器
* @param {Object} ps - 額外參數(shù)
* @param {Number} ps.scale - 縮放,默認 1
* @param {Boolean} ps.withGray - 是否進行灰度處理,默認 true
* @param {String} ps.format - 圖片格式,默認 image/jpeg
* @param {Boolean} ps.natural - 是否使用圖片元素的原始尺寸,默認 true
* @returns {String}
*/
function imgToBase64(img, ps={}) {
    if(typeof(img)==='string')  img = document.querySelector(img)
    if(Object.prototype.toString.call(img) != '[object HTMLImageElement]')
        throw Error(`參數(shù) img 必須是一個有效的 HTMLImageElement 對象或選擇器`)

    ps = Object.assign({scale:1.0, withGray:true, format: "image/jpeg", natural:true}, ps)
    let canvas = document.createElement("canvas")
    let ctx = canvas.getContext("2d")
    let width = ps.natural? img.naturalWidth : img.width
    let height = ps.natural? img.naturalHeight : img.height

    canvas.width = width * ps.scale
    canvas.height = height * ps.scale
    ctx.drawImage(img, 0, 0, width, height, 0, 0, canvas.width, canvas.height)

    //灰度處理,一定程度上使得圖片內(nèi)字符更加清晰
    if (ps.withGray) {
        let imgD = ctx.getImageData(0, 0, canvas.width, canvas.height)
        let len = canvas.width * canvas.height * 4
        for (let i = 0; i < len; i += 4) {
            let gray = Math.floor((imgD.data[i] + imgD.data[i + 1] + imgD.data[i + 2]) / 3)
            imgD.data[i] = imgD.data[i + 1] = imgD.data[i + 2] = gray > 100 ? gray : 0
        }

        ctx.putImageData(imgD, 0, 0)
    }

    return canvas.toDataURL(ps.format)
}

使用方式

imgToBase64(".logo")
// 縮放 0.5 倍
imgToBase64(document.querySelector(".logo"), {scale:0.5})

如需處理遠程圖片,可以參考上面代碼進行改造。

拓展

廢話不多說,直接上代碼

base64 (url) {
      return new Promise((resolve) => {
        const image = new Image()
        // 先設置圖片跨域屬性
        image.crossOrigin = 'Anonymous'
        // 再給image賦值src屬性,先后順序不能顛倒
        image.src = url
        image.onload = function () {
          const canvas = document.createElement('CANVAS')
          // 設置canvas寬高等于圖片實際寬高
          canvas.width = image.width
          canvas.height = image.height
          canvas.getContext('2d').drawImage(image, 0, 0)
          // toDataUrl可以接收2個參數(shù),參數(shù)一:圖片類型,參數(shù)二: 圖片質(zhì)量0-1(不傳默認為0.92)
          const dataURL = canvas.toDataURL('image/jpeg')
          resolve(dataURL)
        }
        image.onerror = () => {
          resolve({ message: '相片處理失敗' })
        }
      })
    },

我們傳入一個圖

async mounted () {
    // this.init()
    const url = await this.base64('https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg')
    console.log(url)
  },

片地址看看是否成功 

但是,一般我們在做這樣的需求前,處理的圖片肯定不止一張,接下來就要批量處理,但是這個方法是異步,我們要將一個數(shù)組內(nèi)的每個對象的地址都轉成base64,才算真正完成我們的功能。前端一般接收到后端的數(shù)據(jù)一般是這種格式。

但是我們正常使用map函數(shù)遍歷去將圖片地址轉成base64,上代碼:

 const newImgOBj = await Promise.all(this.imgOBj.map(async (item) => {
      return {
        name: item.name,
        img: await this.base64(item.img)
      }
    }))
    console.log(newImgOBj)

打印一下看結果發(fā)現(xiàn)我們的圖片地址已經(jīng)變成了base64編碼。

最后我們將圖片使用img標簽正常渲染就好了,小知識:瀏覽器在識別同一個一模一樣的圖片地址,瀏覽器只會請求一遍該圖片資源哦。 

以上就是JS實現(xiàn)圖片元素轉BASE64編碼的簡單示例的詳細內(nèi)容,更多關于JS圖片轉BASE64的資料請關注腳本之家其它相關文章!

相關文章

最新評論

崇州市| 岑溪市| 营山县| 庆阳市| 工布江达县| 乐山市| 乌兰浩特市| 吴忠市| 霸州市| 扶余县| 九江县| 曲沃县| 康乐县| 盘锦市| 大石桥市| 宁海县| 隆林| 繁昌县| 莒南县| 兴安县| 邻水| 晋宁县| 铅山县| 潍坊市| 海阳市| 游戏| 全南县| 嘉峪关市| 长乐市| 苏州市| 东乌珠穆沁旗| 麻城市| 瑞昌市| 长治县| 苗栗市| 武胜县| 通州区| 赣榆县| 广宁县| 东阳市| 沧州市|