美文网首页
canvas实现计算图片底色

canvas实现计算图片底色

作者: 反者道之动001 | 来源:发表于2018-09-10 14:42 被阅读50次

    此代码是小程序实现, 其实小程序的canvas抄的一模一样, 改成web就改关键词。

    需求是这样,计算图片的底色是否偏白, 偏白加外边框颜色,下面是实现代码/

    export default function(e){
        setTimeout((_: any) => {
            interface ImgT {
                width: number
                height: number
            }
            // 取边缘像素的平均值
            let getVal = (img: imgT,data: any) : number [] => {
                var w = img.w
                ,h = img.h
                ,r = 0, g = 0, b = 0
                ,iw = w, ih = (w*h*4) / (w*4) 
                ,pw = [2, 2, 2, 2] // 上左下右
                ,useNum = 0
                for(var i = 0; i<= (w*h*4) - 3; i+=4){
                    if(
                        (i/4/w) > pw[0] && (i/4/w) < ih - pw[2] && 
                        (i/4/h) > pw[1] && (i/4/h) < ih - pw[3]
                    ){
                        r += data[i]
                        g += data[i+1]
                        b += data[i+2]
                        useNum++
                    }
                }
                return [r, g, b].map(e => (e / (useNum)))
                    .map(e => e | 0)
            }
            try{
                const canvasId = 'goodsSpecCanvas'
                const ctx = wx.createCanvasContext(canvasId)
                let item = e.goods_spec[0]
                // e.goods_spec.forEach(e => {
                    let imgUrl = item.img
                    if(!imgUrl){
                        console.log('---商品规格图片为空---')
                        return
                    }
                    let imgWidth = 200
                    let imgHeight = 200
                    // TODO 清空画图
                    wx.downloadFile({
                        url: imgUrl,
                        success: function(res) {
                            // 背景图
                            ctx.drawImage(res.tempFilePath, 0, 0, imgWidth, imgHeight)
                            ctx.draw()
                            // 这里需要改一下。
                            setTimeout(() => {
                                wx.canvasGetImageData({
                                    canvasId,
                                    x: 0, y: 0,
                                    width: imgWidth, height: imgHeight,
                                    success(res) {
                                        let rgb = getVal({w: imgWidth, h: imgHeight}, res.data)
                                        console.log('---商品规格平均值---')
                                        console.log(rgb)
                                    }
                                })
                            }, 3e3)
                        }
                    })                
                // })
            }catch(e){
                console.log(e)
            }
        }, 0)
    
    }
    
    

    --END--

    相关文章

      网友评论

          本文标题:canvas实现计算图片底色

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