canvas.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. Page({
  2. data: {
  3. src: './test-photo.png',
  4. cw: 0,
  5. ch: 0,
  6. },
  7. test() {
  8. wx.getImageInfo({
  9. src: this.data.src,
  10. success: e => {
  11. console.log(e)
  12. let ch = e.height * 2
  13. let cw = e.width * 2
  14. this.setData({
  15. ch,
  16. cw
  17. })
  18. const query = wx.createSelectorQuery();
  19. query.select('#myCanvas').node().exec((res) => {
  20. const canvas = res[0].node;
  21. const ctx = canvas.getContext('2d');
  22. const img = canvas.createImage();
  23. let h = ch / 2
  24. let w = cw / 2
  25. canvas.height = h * 0.85
  26. canvas.width = w * 0.9
  27. img.src = this.data.src
  28. img.onload = () => {
  29. ctx.drawImage(img, -w * 0.05, -h * 0.05);
  30. }
  31. })
  32. }
  33. })
  34. },
  35. async saveImg() {
  36. const query = wx.createSelectorQuery();
  37. const canvas = await new Promise((resolve, reject) => {
  38. query.select('#myCanvas')
  39. .fields({
  40. node: true,
  41. size: true
  42. })
  43. .exec(async (res) => {
  44. resolve(res[0].node);
  45. })
  46. });
  47. wx.canvasToTempFilePath({
  48. canvas,
  49. success: (res) => {
  50. wx.saveImageToPhotosAlbum({
  51. filePath: res.tempFilePath,
  52. success: function (data) {
  53. wx.showToast({
  54. title: '已保存到相册',
  55. icon: 'success',
  56. duration: 2000
  57. })
  58. },
  59. fail: function (err) {
  60. if (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail authorize no response") {
  61. wx.showModal({
  62. title: '提示',
  63. content: '需要您授权保存相册',
  64. showCancel: false,
  65. success: modalSuccess => {
  66. wx.openSetting({
  67. success(settingdata) {
  68. if (settingdata.authSetting['scope.writePhotosAlbum']) {
  69. // wx.showModal({
  70. // title: '提示',
  71. // content: '获取权限成功,再次点击图片即可保存',
  72. // showCancel: false,
  73. // })
  74. } else {
  75. wx.showModal({
  76. title: '提示',
  77. content: '获取权限失败',
  78. showCancel: false,
  79. })
  80. }
  81. },
  82. fail(failData) {
  83. console.log("failData", failData)
  84. },
  85. complete(finishData) {
  86. console.log("finishData", finishData)
  87. }
  88. })
  89. }
  90. })
  91. } else {
  92. wx.showToast({
  93. title: '请保存图片',
  94. icon: 'none',
  95. duration: 2000
  96. })
  97. }
  98. },
  99. })
  100. },
  101. fail(res) {
  102. console.log('fail');
  103. }
  104. }, this)
  105. },
  106. onLoad(options) {
  107. this.setData({
  108. src: options.src
  109. })
  110. this.test()
  111. }
  112. })