canvas合成图(js)

// 图片路径

const data = ['./components/invite-poster.jpg', './components/feedback.jpg']

let base64 = []

window.onresize = () => {

window.location.reload()

}

 

draw(() => {

$('.poster-box').innerHTML = '<img src="' + base64[0] + '" id="poster-img">'

let posterWidth = $('#poster-img').width

let posterHeight = $('#poster-img').height

if (+posterWidth >= +posterHeight) {

          $('#poster-img').style.width = $('body').offsetWidth + 'px'

} else {

           $('#poster-img').style.height = $('body').offsetHeight + 'px'

}

})

 

function draw(callback) {

let canvas = document.createElement('canvas')

let context = canvas.getContext('2d')

let len = data.length

let oldWidth

let oldHeight

//  canvas合成的图片会很模糊,用设备的物理像素和设备独立像素处理可解决

let devicePixelRatio = window.devicePixelRatio || 1

let backingStoreRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1

let ratio = devicePixelRatio / backingStoreRatio

 

function drawing(n) {

if (n < len) {

        /*eslint-disable*/

       let img = new Image()

       img.src = data[n]

       img.onload = () => {

          if (n === 1) {

                     // console.log((c.width - 180) / 2) 

                     context.drawImage(img, (oldWidth - 180) / 2, (oldHeight - 180) / 2, 180, 180)

           } else {

                       //  根据图片宽高比例,设备像素比例设计canvas合成图片模糊bug

                       canvas.width = img.width

                       canvas.height = img.height

                       context.fillStyle = '#fff'

                       context.fill()

                       oldWidth = canvas.width

                       oldHeight = canvas.height

                       canvas.width = oldWidth * ratio

                       canvas.height = oldHeight * ratio

                       canvas.style.width = oldWidth + 'px'

                       canvas.style.height = oldHeight + 'px'

                       context.scale(ratio, ratio)

 

                      context.drawImage(img, 0, 0)

        }

       drawing(n + 1)

    }

} else {

          // 保存生成作品图片

         base64.push(canvas.toDataURL('image/jpeg', 0.8))

         callback()

}

}

drawing(0)

}

参考文章:

https://blog.csdn.net/anmoran/article/details/54343380

https://blog.csdn.net/u013239233/article/details/70210755/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值