前端html

文章

微信小程序相机渲染到canvas

时间:2024-12-17 11:24 阅读:439
<camera mode="normal" resolution="high" device-position="back" flash="off" binderror="error" id="camera" bindinitdone="loadedmetadata" frame-size="medium">
        <view class="viewer"></view>
</camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<button type="primary" bindtap="savePhoto">保存</button>
<!-- <image mode="widthFix" src="{{src}}"></image> -->
<canvas type="2d" canvas-id="myCanvas" id="myCanvas"></canvas>
// pages/camera/camera.js
function convertToGrayscale(data) {
  let g = 0
  for (let i = 0; i < data.data.length; i += 4) {
                const luminance = (0.299 * data.data[i] + 0.587 * data.data[i+1] + 0.114 * data.data[i+2]) / 255;
                if (luminance > 150 / 255) {
                        data.data[i] = 0
                        data.data[i+1] = 0
                        data.data[i+1] = 0
                        data.data[i+3] = 0
                }
  }
  return data
}
let canvas = null;
Page({

  /**
   * 页面的初始数据
   */
  data: {
                takePicture: false,
                originWidth: 0,
                originHeight: 0,
  },
        takePhoto() {
                this.setData({
                        takePicture: true
                })
    const ctx = wx.createCameraContext()
    ctx.takePhoto({
      quality: 'original',
      success: (res) => {
        this.setData({
          src: res.tempImagePath
                                })
                                // wx.saveImageToPhotosAlbum({
                                //         filePath: res.tempImagePath
                                // })
                                wx.getImageInfo({
                                        src: res.tempImagePath,
                                        success: (res) => {
                                                console.log(res.width)
                                                console.log(res.height)
                                                this.setData({
                                                        originWidth: res.width,
                                                        originHeight: res.height,
                                                })
                                        }
                                })
                                this.drawCameraToCanvas(res.tempImagePath)
      }
    })
        },
        // 将摄像头画面绘制到canvas
        drawCameraToCanvas: function (temp) {
                var that = this
                const dpr = wx.getWindowInfo().pixelRatio
                const rate = wx.getSystemInfoSync().screenWidth/375
                const query = wx.createSelectorQuery()
                query.select('#myCanvas').fields({ node: true, size: true })
                        .exec((res)=>{
                                canvas = res[0].node
                                const ctx = canvas.getContext('2d')
                                
                                console.log(dpr)
                                console.log(rate)
                                canvas.width = 300
                                canvas.height = 100
                                ctx.scale(dpr, dpr)
                                const bg = canvas.createImage()
                                bg.src = temp
                                bg.onload = ()=>{
                                        ctx.drawImage(
                                                bg, 
                                                Math.round(225*(this.data.originWidth/750)), Math.round(300*(this.data.originWidth/750)), 
                                                Math.round(300*(this.data.originWidth/750)*dpr), Math.round(100*(this.data.originWidth/750)*dpr), 
                                                0, 0, 
                                                300, 100)
                                        var imgData = ctx.getImageData(0, 0, canvas.width,canvas.height)
                                        console.log(imgData)
                                        ctx.putImageData(convertToGrayscale(imgData), 0, 0);
                                }
                        })
        },
        savePhoto(){
                console.log('asd')
                wx.canvasToTempFilePath({
                        canvas: canvas,
                        fileType: 'png',
                        success: res => {
                                console.log(res)
                                wx.saveImageToPhotosAlbum({
                                        filePath: res.tempFilePath
                                })
                        },
                        fail: res => {
                                console.log(res)
                        }
                })
                
        },
})


Copyright © 2024  Erbing 版权所有  备案号:黑ICP备17006126号-3

0.565616s