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

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

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

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

/**
* 將指定元素對(duì)象轉(zhuǎn)換為 Base64 格式
* @param {HTMLImageElement|String} img - 圖片元素(如通過(guò) document.querySelector 獲?。┗蛘哌x擇器
* @param {Object} ps - 額外參數(shù)
* @param {Number} ps.scale - 縮放,默認(rèn) 1
* @param {Boolean} ps.withGray - 是否進(jìn)行灰度處理,默認(rèn) true
* @param {String} ps.format - 圖片格式,默認(rèn) image/jpeg
* @param {Boolean} ps.natural - 是否使用圖片元素的原始尺寸,默認(rèn) 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 必須是一個(gè)有效的 HTMLImageElement 對(duì)象或選擇器`)

    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})

如需處理遠(yuǎn)程圖片,可以參考上面代碼進(jìn)行改造。

拓展

廢話不多說(shuō),直接上代碼

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

我們傳入一個(gè)圖

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

片地址看看是否成功 

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

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

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

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

最后我們將圖片使用img標(biāo)簽正常渲染就好了,小知識(shí):瀏覽器在識(shí)別同一個(gè)一模一樣的圖片地址,瀏覽器只會(huì)請(qǐng)求一遍該圖片資源哦。 

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

相關(guān)文章

  • JS上傳組件FileUpload自定義模板的使用方法

    JS上傳組件FileUpload自定義模板的使用方法

    這篇文章主要為大家詳細(xì)介紹了JS上傳組件FileUpload自定義模板的使用方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • javascript 獲取url參數(shù)和script標(biāo)簽中獲取url參數(shù)函數(shù)代碼

    javascript 獲取url參數(shù)和script標(biāo)簽中獲取url參數(shù)函數(shù)代碼

    不要在方法中調(diào)用方法,否則可能始終獲取的是最后一個(gè)js的文件的參數(shù),要在方法中使用,請(qǐng)先用變量保存,在方法中直接獲取
    2010-01-01
  • 幾個(gè)有趣的Javascript Hack

    幾個(gè)有趣的Javascript Hack

    在網(wǎng)上看到幾個(gè)有意思的Javascript代碼,和大家分享一下。直接將代碼拷貝到IE中即可,注意代碼為一樣。不可分行
    2010-07-07
  • JavaScript中文件緩存導(dǎo)致404錯(cuò)誤的解決方案

    JavaScript中文件緩存導(dǎo)致404錯(cuò)誤的解決方案

    當(dāng) JavaScript 文件在服務(wù)器上被更新或刪除后,瀏覽器仍然請(qǐng)求舊的緩存文件,導(dǎo)致 404 錯(cuò)誤,本文將深入探討這一問(wèn)題的原因,并提供多種解決方案,需要的可以參考下
    2025-03-03
  • JavaScript Class的正確使用方法詳解

    JavaScript Class的正確使用方法詳解

    在JavaScript中,類(lèi)是通過(guò)class關(guān)鍵字來(lái)定義的,它的本質(zhì)是一種語(yǔ)法糖,仍然是基于原型鏈的,class 內(nèi)部的屬性和方法最終都會(huì)添加到構(gòu)造函數(shù)的 prototype 屬性上,本文給大家介紹了JavaScript Class的正確打開(kāi)方式,需要的朋友可以參考下
    2025-03-03
  • layui前端時(shí)間戳轉(zhuǎn)化實(shí)例

    layui前端時(shí)間戳轉(zhuǎn)化實(shí)例

    今天小編就為大家分享一篇layui前端時(shí)間戳轉(zhuǎn)化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 微信小程序?qū)崿F(xiàn)左右聯(lián)動(dòng)

    微信小程序?qū)崿F(xiàn)左右聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)左右聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解js訪問(wèn)對(duì)象的屬性和方法

    詳解js訪問(wèn)對(duì)象的屬性和方法

    在本篇文章里我們給大家分享了關(guān)于js訪問(wèn)對(duì)象的屬性和方法的相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2018-10-10
  • 基于js實(shí)現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過(guò)程解析

    基于js實(shí)現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過(guò)程解析

    這篇文章主要介紹了基于js實(shí)現(xiàn)復(fù)制內(nèi)容到操作系統(tǒng)粘貼板過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • js項(xiàng)目中前端如何實(shí)現(xiàn)無(wú)感刷新token

    js項(xiàng)目中前端如何實(shí)現(xiàn)無(wú)感刷新token

    本文主要介紹了js項(xiàng)目中前端如何實(shí)現(xiàn)無(wú)感刷新token,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論