小程序 canvas


<view class="intro">
  <view>
    原始价格:<input class="price" type="num" value="{{price}}" bindinput="bindKeyP" placeholder="请输入"/>
  </view>
  <view>
    拼团价格:<input class="price" type="num" value="{{teamprice}}" bindinput="bindKeyT" placeholder="请输入"/>
  </view>
  <view>
    规格:<input class="price" value="{{specs}}" bindinput="bindKeyS" placeholder="请输入"/>
  </view>
  <view>
    文案:<input class="wenan" value="{{wenan}}" placeholder="请输入#号分割(8个字)" bindinput="bindKeyW"/>
  </view>
  <view class="imgitem" >
    上传图片:
    <image style="width: 100%; height: 100%" src="{{poster}}" bindtap="chooseImg" mode="aspectFill" />
  </view>
</view>

<button class='zfbtn m_l' bindtap='formSubmit'>融合</button>
<!--生成海报  -->
<view class='imagePathBox' hidden="{{maskHidden == false}}">
  <image src="{{imagePath}}" class='shengcheng' bindtap="previewImg"></image>
  <button class='baocun' bindtap='baocun'>保存</button>
</view>
<view hidden="{{maskHidden == false}}" class="mask"></view> 
<view class="canvas-box">
  <canvas type="2d" style="width: 500px;height: 400px;position:fixed;top:9999px" id="mycanvas"/>
</view> 

Page({
  data: {
    imagePath: "",
    maskHidden: false,
    price: '25.6',
    isCreate: false,
    teamprice: '66.3',
    specs: '3包',
    wenan: "卡时间段#快速度快",
    poster: "https://juxinbox.oss-cn-hangzhou.aliyuncs.com/a2ceb86356fd4d9895b0f1d38216f3ca.jpg",
  },
  onLoad: function () {
  },
  onReady() {

  },
  onShow: function () {
  },
  // /点击生成
  formSubmit: function (e) {
    var that = this;
    this.setData({
      maskHidden: false
    });
    wx.showToast({
      title: '融合中...',
      icon: 'loading',
      duration: 1000
    });
    setTimeout(function () {
      wx.hideToast()
      that.createNewImg();
      that.setData({
        maskHidden: true
      });
    }, 1000)
  },
  async createNewImg() {
    var that = this;
    const query = wx.createSelectorQuery();
    const canvasObj = await new Promise((resolve, reject) => {
      query.select('#mycanvas')
        .fields({ node: true, size: true })
        .exec(async (res) => {
          console.log('2323', res)
          resolve(res[0].node);
          const canvas = res[0].node
          const CanvasContext = canvas.getContext('2d')
          console.log('334', CanvasContext)
          
          const dpr = wx.getSystemInfoSync().pixelRatio;
          canvas.width = res[0].width * dpr;
          canvas.height = res[0].height * dpr;
          CanvasContext.scale(dpr, dpr);
          CanvasContext.clearRect(0, 0, 500, 400); //清空画板
          CanvasContext.fillStyle = "#fff";
          CanvasContext.fillRect(0, 0, 500, 400);
          

          let ImgG = canvas.createImage();
          ImgG.src = that.data.poster;
          ImgG.onload = () => {
            console.log('2121',ImgG)
            CanvasContext.drawImage(ImgG,0,0,500,400);
          }
          let ImgBg = canvas.createImage();
          ImgBg.src = 'https://juxinbox.oss-cn-hangzhou.aliyuncs.com/8a15590c713541928071696c7a576d13.png';
          ImgBg.onload = () => {
            console.log('212',ImgBg)
            CanvasContext.drawImage(ImgBg,0,0,500,400);
            //¥
            // CanvasContext.save()
            CanvasContext.font = '20px 宋体'
            CanvasContext.fillStyle = '#000';
            CanvasContext.textAlign = 'center';
            //("文案",x轴,y轴)
            CanvasContext.fillText("¥", 20, 375);
            CanvasContext.stroke();

            // 团购价
            var pv = that.data.teamprice.split('.');
            CanvasContext.font = 'normal 500 40px DINAlternate-Bold'
            CanvasContext.fillStyle = '#FFF9F9';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)1位x=50;2位55
            CanvasContext.fillText(pv[0], 55, 377);
            CanvasContext.stroke();
            CanvasContext.font = 'normal 500 32px DINAlternate-Bold'
            CanvasContext.fillStyle = '#FFF9F9';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)1位x=75;2位55
            CanvasContext.fillText('.' + pv[1], 90, 377);
            CanvasContext.stroke();
            

            //规格
            
            CanvasContext.font = 'normal 500 16px DINAlternate-Bold'
            CanvasContext.fillStyle = '#FFF';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)1位x=92;2位109
            CanvasContext.fillText('/', 108, 375);
            CanvasContext.stroke();
            

            CanvasContext.font = 'normal 500 16px DINAlternate-Bold'
            CanvasContext.fillStyle = '#FFF';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)1位x=109;2位55
            CanvasContext.fillText(that.data.specs, 124, 377);
            CanvasContext.stroke();
            

            //原价
            CanvasContext.font = 'normal 500 12px Source Han Sans CN'
            CanvasContext.fillStyle = '#FFF';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)
            CanvasContext.fillText('原价:' + that.data.price, 70, 395);
            CanvasContext.stroke();
            CanvasContext.fillStyle = '#fff'
            // ("x轴","Y轴","宽","高")
            CanvasContext.strokeRect(40, 391, 60, 0)
            

            var name = that.data.wenan.split('#');
            //文案(normal->正常 500->粗细 32px->大小 Source Han Sans SC->字体)
            CanvasContext.font = '32px 宋体'
            CanvasContext.fillStyle = '#FFF';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)
            CanvasContext.fillText(name[0], 260, 380);
            CanvasContext.stroke();
            CanvasContext.font = '32px 宋体'
            CanvasContext.fillStyle = '#FFF';
            CanvasContext.textAlign = 'center';
            // ("文案",x轴,y轴)
            CanvasContext.fillText(name[1], 410, 380);
            CanvasContext.stroke();
            // CanvasContext.restore()

          }
          
         
          
        })

    });
    console.log('33',canvasObj)
    wx.canvasToTempFilePath({
      canvas: canvasObj,
      success: function (res) {
        console.log('234', res)
        var tempFilePath = res.tempFilePath;
        that.setData({
          imagePath: tempFilePath,
          canvasHidden: true
        });
      },
      fail: function (res) {
        console.log(212,res);
      }
    });
    
    // var CanvasContext = wx.createCanvasContext('mycanvas');
    // CanvasContext.setFillStyle("#fff")
    // CanvasContext.fillRect(0, 0, 500, 400);
    // wx.getImageInfo({
    //   src: that.data.poster,
    //   success: function (res) {
    //     console.log('22',res.path)
    //     CanvasContext.drawImage(res.path, 0, 0, 500, 400);
    //     wx.getImageInfo({
    //       src: 'https://juxinbox.oss-cn-hangzhou.aliyuncs.com/8a15590c713541928071696c7a576d13.png',
    //       success: function (res) {
    //         console.log('223',res.path)
    //         CanvasContext.drawImage(res.path, 0, 0, 500, 400);
    //         //¥
    //         CanvasContext.font = 'normal 500 20px DIN Alternate'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         //("文案",x轴,y轴)
    //         CanvasContext.fillText("¥", 20, 375);
    //         CanvasContext.stroke();

    //         //团购价
    //         var pv = that.data.teamprice.split('.');
    //         CanvasContext.font = 'normal 500 40px DINAlternate-Bold'
    //         CanvasContext.setFillStyle('#FFF9F9');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)1位x=50;2位55
    //         CanvasContext.fillText(pv[0], 55, 377);
    //         CanvasContext.stroke();
    //         CanvasContext.font = 'normal 500 32px DINAlternate-Bold'
    //         CanvasContext.setFillStyle('#FFF9F9');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)1位x=75;2位55
    //         CanvasContext.fillText('.'+ pv[1],90, 377);
    //         CanvasContext.stroke();

    //         //规格
    //         CanvasContext.font = 'normal 500 16px DINAlternate-Bold'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)1位x=92;2位109
    //         CanvasContext.fillText('/',108, 375);
    //         CanvasContext.stroke();
    //         CanvasContext.font = 'normal 500 16px DINAlternate-Bold'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)1位x=109;2位55
    //         CanvasContext.fillText(that.data.specs,124, 377);
    //         CanvasContext.stroke();

    //         //原价
    //         CanvasContext.font = 'normal 500 12px Source Han Sans CN'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)
    //         CanvasContext.fillText('原价:'+that.data.price,70, 395);
    //         CanvasContext.stroke();
    //         CanvasContext.setStrokeStyle('#fff')
    //         // ("x轴","Y轴","宽","高")
    //         CanvasContext.strokeRect(40, 391, 60, 0)

    //         var name = that.data.wenan.split('#');
    //         //文案(normal->正常 500->粗细 32px->大小 Source Han Sans SC->字体)
    //         CanvasContext.font = 'normal 500 32px Source Han Sans SC'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)
    //         CanvasContext.fillText(name[0], 260, 380);
    //         CanvasContext.stroke();
    //         CanvasContext.font = 'normal 500 32px Source Han Sans SC'
    //         CanvasContext.setFillStyle('#FFF');
    //         CanvasContext.setTextAlign('center');
    //         // ("文案",x轴,y轴)
    //         CanvasContext.fillText(name[1], 410, 380);
    //         CanvasContext.stroke();


    //         CanvasContext.draw();
    //       }
    //     })
    //   }
    // })

    //将生成好的图片保存到本地,需要延迟一会,绘制期间耗时
    //非2d
    // setTimeout(function () {
    //   wx.canvasToTempFilePath({
    //     canvasId: 'mycanvas',
    //     success: function (res) {
    //       console.log('234', res)
    //       var tempFilePath = res.tempFilePath;
    //       that.setData({
    //         imagePath: tempFilePath,
    //         canvasHidden: true
    //       });
    //     },
    //     fail: function (res) {
    //       console.log(res);
    //     }
    //   });
    // }, 1000);
  },














  previewImg() {
    if (this.data.imagePath) {
      //预览图片,预览后可长按保存或者分享给朋友
      wx.previewImage({
        urls: [this.data.imagePath]
      })
    }
  },
  bindKeyS: function (e) {
    this.setData({
      specs: e.detail.value
    })
  },
  bindKeyP: function (e) {
    this.setData({
      price: e.detail.value
    })
  },
  bindKeyT: function (e) {
    this.setData({
      teamprice: e.detail.value
    })
  },
  bindKeyW: function (e) {
    this.setData({
      wenan: e.detail.value
    })
  },
  chooseImg: function (e) {
    var that = this;
    // const urls = that.data.urls
    // 选择图片
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],// 可以指定来源是相册还是相机,默认二者都有
      success: function (res) {
        console.log('上传图片', res)
        wx.showLoading({
          title: '上传中',
          mask: true
        })
        const tempFilePaths = res.tempFilePaths[0]
        wx.uploadFile({
          //上传图片的网路请求地址
          url: 'https://test2.juxinbox.com/jmtyjmall/api/1.0/wx/goods/mng/uptImg',
          filePath: tempFilePaths,
          name: 'file',
          success: function (res) {
            console.log("success", res);
            var jsonStr = res.data;
            jsonStr = JSON.parse(jsonStr)
            console.log('313', jsonStr)
            const imgurls = jsonStr.data
            that.setData({
              poster: imgurls
            })
            wx.hideLoading()
          },
          fail: function (res) {
            console.log("error");
            wx.hideLoading()
          }
        });
      }
    })
    console.log('shangchuan', this.data)

  },
  baocun: function () {
    var that = this;
    console.log('用户点击保存');
    wx.getSetting({
      success(res) {
        console.log('223', res)
        if (!res.authSetting['scope.writePhotosAlbum']) {
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success() {
              console.log('授权成功')
            },
            fail() {
              console.log('22311', res)
            }
          })
        } else {
          wx.saveImageToPhotosAlbum({
            filePath: that.data.imagePath,
            success(res) {
              wx.showModal({
                content: "已保存",
                showCancel: false,
                confirmText: "好的",
                confirmColor: "#333",
                success: function (res) {
                  if (res.confirm) {
                    console.log("用户点击确定");
                    /* 该隐藏的隐藏 */
                    that.setData({
                      maskHidden: false,
                      closeShare2: false,
                      isCreate: false,
                    });
                  }
                },
                fail: function (res) {
                  console.log(11111);
                }
              });
            }
          });
        }
      }
    })
  },
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值