美文网首页
Canvas 圖片顏色轉換

Canvas 圖片顏色轉換

作者: _Cian | 来源:发表于2017-08-05 00:44 被阅读0次

    圖片顏色轉換, 意思就如字面上所說, 可以將我們在畫布Canvas上的顏色進行轉換。
    就像有些圖片App那樣, 可以把顏色加強對比、增加飽和、灰階效果等等

    由於工作上的需要, 這次需要將幾張圖片結合近一張畫布Canvas接著將其反白。
    實作方式並不困難,考慮以下程式範例以及註解:

    // 建立畫布
    let canvas = document.createElement('canvas')
    // 取得Context
    let ctx = canvas.getContext('2d')
    // 設定畫布大小
    let canvasSize = 300
    // 取得裝置 devicePixelRatio
    let devicePixelRatio = window.devicePixelRatio || 1
    // 取得裝置 BackingStorePixelRatio
    let backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1
    // 取得畫布實際大小比值
    let ratio = (devicePixelRatio / backingStoreRatio)
    // 設定畫布樣式寬高
    canvas.style.width = canvas.style.height = `${canvasSize}px`
    // 設定畫布實際寬高
    canvas.width = canvas.height = canvasSize * ratio
    // 修正畫布內容大小
    ctx.scale(ratio, ratio)
    
    // 以上內容為修正失真, 接著載入範例圖片
    let image = new Image()
    image.addEventListener('load', () => {
      
      ctx.drawImage(image, 0, 0)
      
      document.body.appendChild(canvas)
      
      // 本主題範例重點由此開始
      
      // 建立反白圖片物件
      let antiWhiteImage = new Image()
      
      // 取得原畫布圖像資料
      antiWhiteImage = ctx.getImageData(0, 0, canvas.width, canvas.height)
      
      let red, green, blue, alpha, convertColor
      // 注意這邊的迴圈變數i, 每次為 i+=4
      for (let i = 0; i < antiWhiteImage.data.length; i += 4) {
        // i = red 0~255
        red = antiWhiteImage.data[i]
        // i+1 = green 0~255
        green = antiWhiteImage.data[i + 1]
        // i+2 = blue 0~255
        blue = antiWhiteImage.data[i + 2]
        // i+3 = alpha 0~255
        alpha = antiWhiteImage.data[i + 3]
    
        // 轉換所有非白色的顏色至白色, 其他則轉為黑色
        convertColor = (red + green + blue) > 0 ? 255 : 0
        antiWhiteImage.data[i]      = convertColor
        antiWhiteImage.data[i + 1]  = convertColor
        antiWhiteImage.data[i + 2]  = convertColor
        antiWhiteImage.data[i + 3]  = 255
      }
      
      
      // 宣告畫布2
      let canvas2 = document.createElement('canvas')
      // 取得畫布2, Context
      let ctx2 = canvas2.getContext('2d')
      
      // 設定畫布2樣式寬高
      canvas2.style.width = canvas2.style.height = `${canvasSize}px`
      // 設定畫布2實際寬高
      canvas2.width = canvas2.height = canvasSize * ratio
      
      ctx2.putImageData(antiWhiteImage, 0, 0);
      document.body.appendChild(canvas2)
    })
    image.src = 'http://reso2.yiihuu.com/530647-z.jpg'
    

    此範例邏輯正確, 但實際執行此範例會遇到Canvas跨域問題因此目前無法繪出圖二

    相关文章

      网友评论

          本文标题:Canvas 圖片顏色轉換

          本文链接:https://www.haomeiwen.com/subject/qytilxtx.html