Canvas圖片處理之黑白、反向(附演示及源碼)

1 前 言

1.1 預覽圖

2 實 現

本例使用:vue

  • Vue
  • element-ui

2.1 畫 圖

<!--canvas 定義-->
<canvas id="canvas01" width="400" height="400"></canvas>
複製代碼
//  vue 生命週期
mounted(){
    this.drawCanvas()
},
複製代碼
drawCanvas(){
    var cav = document.getElementById('canvas01')
    var ctx = cav.getContext('2d')
    var img = new Image()
    img.crossOrigin = 'anonymous'
    // 這裏的 url 指向了 我 GitHub 頭像地址
    img.src = this.url + '?time=' + new Date().getTime()
    img.onload = () =>{
        if(img.complete){
            ctx.drawImage(img,0,0,img.width,img.height)
            setTimeout(() =>{
                // 保存原始像素信息
                this.imagePixels = [...ctx.getImageData(0,0,cav.width,cav.height).data]
            },1)
        }
    }
}
複製代碼

注意:git

  • canvas 須設置 width height
  • 若你的項目中,有多個 canvas 畫圖,注意 id 定義要不一樣
  • 生命鉤子不能使用 created()
  • img.crossOrigin img.src ?time= 是爲了解決 圖片跨域的問題
  • 爲不影響圖片渲染,保存像素信息的動做,放在異步中執行

若只是用 canvas 畫圖,則不存在跨域問題,這裏的定義是由於要獲取像素信息github

2.2 黑 白

var cav = document.getElementById('canvas01')
var ctx = cav.getContext('2d')
let imageData = ctx.getImageData(0,0,cav.width,cav.height)
let pixels = imageData.data

// 處理像素點
for (let i=0; i<pixels.length; i+=4){
    let r = pixels[i]
    let g = pixels[i+1]
    let b = pixels[i+2]

    // 灰色
    let gray = parseInt((r+g+b)/3)
    imageData.data[i] = gray
    imageData.data[i+1] = gray
    imageData.data[i+2] = gray
}
// 從新畫圖
ctx.putImageData(imageData, 0,0)
複製代碼

2.3 其餘

彩色: 用相同的方法,將以前保存的原始像素恢復回去element-ui

反向: 255 - 原值canvas

還有不少的圖片處理,是將圖片的 r g b 進行不一樣處理跨域

3 後 記

感謝支持。若不足之處,歡迎你們指出,共勉。bash

若是以爲不錯,記得 點贊,謝謝你們 😂異步

歡迎關注 個人: GitHub 掘 金 簡 書ui

3.1 演示地址

xrkffgg.github.io/Kvue/#/Canv…this

3.2 源 碼

github.com/xrkffgg/Kvu…

相關文章
相關標籤/搜索