程序员小程序猫码

小程序 — canvas图片合成

2018-09-28  本文已影响7人  ComfyUI

前言:这章我们为图片添加一些小物件,然后用canvas合成并导出到本地。
GitHub:https://github.com/Ewall1106/miniProgramDemo
我们先看看图片合成的效果:

图片合成过程.gif 图片合成后海报

1、小程序canvas

关于小程序的canvas一些基本概念和方法大家可以去官网看看,我不过多阐述。

2、页面布局

根据我们开头图片所示我们继续一个基本的页面布局

<view class="container">
  <view class="show_block">
    <image class="bg" src="{{bgSrc}}" />
    <image class="img" src="{{imgSrc}}" />
    <canvas class="myCanvas" canvas-id="myCanvas" style="width: 375px; height: 417px;"></canvas>
  </view>
  <button @tap="choose">选择图片</button>
  <button @tap="save">保存海报</button>
</view>
.container {
  .show_block {
    position: relative;
    width: 750rpx;
    height: 834rpx;
  .bg {
    display: block;
    width: 100%;
    height: 100%;
  }
  .img {
    position: absolute;
    top: 86rpx;
    left: 114rpx;
    display: block;
    width: 520rpx;
    height: 527rpx;
  }
  .myCanvas {
    z-index: -1;
    position: absolute;
    top: 0;
    left: 0;
    }
  }
}

3、事件处理

(1)choose选择图片事件

data = {
  bgSrc: '/assets/images/bg.png',
  imgSrc: ''
};
choose() {
  let self = this;
    wx.chooseImage({
      success: function(res) {
        self.imgSrc = res.tempFilePaths[0];
        self.$apply();
      }
    });
    this.$apply();
}

(2)save保存图片事件

save() {
  let self = this;
  if (!this.imgSrc) {
    wepy.showToast({
      title: '请先选择图片',
      icon: 'none',
      duration: 2000
    });
    return false;
  }
  wx.getSetting({
    success(res) {
      if (!res.authSetting['scope.writePhotosAlbum']) {
        wx.authorize({
          scope: 'scope.writePhotosAlbum',
          success() {
            self.saveImage();
          }
      });
      } else {
        self.saveImage();
      }
    }
  });
}
saveImage() {
  wepy.showLoading({
    title: '保存中...'
  });
  let self = this;
  const ctx = wx.createCanvasContext('myCanvas');
  ctx.drawImage(self.bgSrc, 0, 0, 375, 417);
  ctx.drawImage(self.imgSrc, 57, 44, 260, 264);
  ctx.draw(false, function(e) {
    // 保存到本地
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width: 375,
      height: 417,
      canvasId: 'myCanvas',
      success: function(res) {
        let pic = res.tempFilePath;
        wx.saveImageToPhotosAlbum({
          filePath: pic,
          success(res) {
            wx.hideLoading();
            wx.showToast({
              title: '保存成功',
              icon: 'success',
              duration: 2000
            });
          }
        });
      }
    });
  });
}

这样我们就实现合成一张海报并保存到本地。

上一篇 下一篇

猜你喜欢

热点阅读