camera.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const app = getApp()
  2. let ctxWidth = '';
  3. let ctxHeight = '';
  4. let ctx = null; //Camera
  5. let canvaCtx=null;//canvas
  6. Page({
  7. data: {
  8. },
  9. changeText() {
  10. wx.getSystemInfo({
  11. success: res => {
  12. let convasX = res.screenWidth / 4; //遮罩层上下的高度(生成canvas的起始横坐标)
  13. let convasY = res.screenHeight / 5; //遮罩层左右的宽度(生成canvas的起始纵坐标)
  14. let canvasWidth = convasX * 3; //中间裁剪部位的宽度
  15. let canvasHeight = convasY * 3; //中间裁剪部位的高度
  16. let convasXL = convasX / 2;
  17. ctxWidth = canvasWidth; //canvas的宽度
  18. ctxHeight = canvasHeight; //canvas的高度
  19. this.setData({
  20. info: res,
  21. canvasWidth,
  22. canvasHeight,
  23. convasX,
  24. convasXL,
  25. convasY
  26. })
  27. }
  28. })
  29. },
  30. onLoad: function () {},
  31. onShow() {
  32. this.changeText()
  33. },
  34. takePhoto() {
  35. ctx = wx.createCameraContext(); //初始化camera
  36. ctx.takePhoto({ //生成图片
  37. quality: 'high',
  38. success: (res) => { //得到图片
  39. this.takeCanvas(res.tempImagePath)
  40. this.setData({
  41. baseImg: res.tempImagePath,
  42. isBaseImg: true,
  43. isCanvas:true
  44. })
  45. }
  46. })
  47. },
  48. takeCanvas(path) { //将拍摄的照片绘制到canvas上
  49. wx.getImageInfo({
  50. src: path,
  51. success: imgInfo => {
  52. let {info} = this.data;
  53. let convasX = imgInfo.width / 4;
  54. let convasY = imgInfo.height / 5;
  55. let canvasWidth = convasX * 3;
  56. let canvasHeight = convasY * 3;
  57. let convasXL = convasX / 2;
  58. // 我这里宽度和高度都计算了设备比,其实两个值是一样的 ,计算一个就够了
  59. let prxHeight = info.windowHeight / imgInfo.height;//计算设备比
  60. let prxWidth = info.windowWidth / imgInfo.width;//计算设备比
  61. // ctx = wx.createCanvasContext("myCanvas", this);//自定义组件,需要加this
  62. canvaCtx = wx.createCanvasContext("myCanvas");//自定义组件,需要加this
  63. canvaCtx.drawImage(path,convasXL,(convasY-40),canvasWidth,canvasHeight,0,0,(parseInt(canvasWidth) * prxWidth),(parseInt(canvasHeight) * prxHeight));//绘制到canvas上的位置,canvas的宽高等
  64. canvaCtx.draw(true, () => {
  65. wx.canvasToTempFilePath({
  66. fileType: "jpg",
  67. quality: 0.3,
  68. canvasId: "myCanvas",
  69. success: canvasToPath => {
  70. this.setData({
  71. isSuccess:true,
  72. isBaseImg: false,
  73. isCanvas:false,
  74. baseImg: canvasToPath.tempFilePath,
  75. srcCanvasPath: canvasToPath.tempFilePath
  76. })
  77. }
  78. })
  79. // wx.canvasToTempFilePath({
  80. // fileType: "jpg",
  81. // quality: 0.3,
  82. // canvasId: "myCanvas",
  83. // success: canvasToPath => {
  84. // this.setData({
  85. // isBaseImg: false,
  86. // baseImg: canvasToPath.tempFilePath,
  87. // srcCanvasPath: canvasToPath.tempFilePath
  88. // })
  89. // }
  90. // }, this)//自定义组件需要加this
  91. })
  92. }
  93. })
  94. },
  95. clearPhoto(){
  96. canvaCtx.clearRect(0,0,ctxWidth, ctxHeight)
  97. canvaCtx.draw()
  98. this.setData({
  99. srcCanvasPath:"",
  100. isCanvas:false,
  101. isSuccess:false,
  102. isBaseImg:false
  103. })
  104. },
  105. confirmBack(){//确定绘制成功后的操作,根据自己的需求写即可
  106. }
  107. })