首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小程序海报,极简的实现方式

小程序海报,极简的实现方式

作者头像
万少
发布于 2025-02-11 06:34:45
发布于 2025-02-11 06:34:45
21200
代码可运行
举报
运行总次数:0
代码可运行

小程序 canvas 生成海报 - 解决屏幕图片失真,解决无法使用外网图片

源代码在最下方

最终结果

2019-04-30090218
2019-04-30090218

canvas(画布) 元素用于在网页上绘制图形。画布是一个矩形区域,您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

注意

需要注意的是,目前的canvas可以简单分为两种。一种是传统网页中的canvas,一种是小程序中的canvas。两者的功能是完全一样的。只是标签的样式,和 api 略有区别而已。目前我们主要讲解小程序中的canvas。

canvas 的应用场景

  1. 在线游戏
  2. 在线图表
  3. 页面特效
  4. 广告
  5. 图片合成 小程序中常见
    1. 点我加速

    141e77ea75e046709e45115209ba7d9
    141e77ea75e046709e45115209ba7d9
    1. 头像红旗

    u=1152834417,249646381&fm=11&gp=0
    u=1152834417,249646381&fm=11&gp=0
    1. 海报日历

    ceeedd30772bdcbe211c7852f701a4a
    ceeedd30772bdcbe211c7852f701a4a
    1. 其他

1569634970242
1569634970242

简单体验

我们来画一条直线

在canvas中,把画直线的步骤分解为以下几步:

  1. 编写标签
  2. 获取画布实例
  3. 定起点
  4. 连接终点
  5. 连线 (也叫描边)
  6. 上色

编写标签

默认的宽高 为 300px * 150 px 不同于普通的标签,必须要提供一个属性 canvas-id,用于在 js中获取该对象(不是dom对象!!!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<canvas canvas-id="firstCanvas"></canvas>
复制代码

获取画布实例

通过 canvas-id 来获取 该实例 不是dom元素,可以理解为另一种对象如 Math Date String等即可

index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  onLoad() {
    // 1 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    console.log(context);
  }
})
复制代码

点起点

在canvas中,存在一个坐标系 如下图:

我们在canvas中所讲的坐标都是相对于canvas内部坐标而言

绘图1
绘图1

定个起点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 定起点
    context.moveTo(10, 10);
复制代码

定终点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 定终点
	context.lineTo(300,150);
复制代码

连线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 连线
    context.stroke();
复制代码

上色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 上色
    context.draw();
复制代码

完整代码

index.wxml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 1 写标签 -->
<canvas canvas-id="firstCanvas"></canvas>
复制代码

index.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  onLoad() {
    // 2 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    // 3 定起点
    context.moveTo(10, 10);
    // 4 定终点
    context.lineTo(300,150);
    // 5 连线
    context.stroke();
    // 6 上色
    context.draw();
  }
})
复制代码

效果

1569657291546
1569657291546

内置的其他规则图形

canvas中还封装了画规则图形的方法,如:

  1. 画空心的矩形
  2. 画圆弧
  3. 画实心的矩形
  4. 画文字(把字符串画上去)

画矩形

CanvasContext.strokeRect(number x, number y, number width, number height)

CanvasContext.strokeRect(画在画布的X,画在画布的Y,画多宽,画多高)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 1 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    // 2 调用canvas内置的画“矩形”的方法
    context.strokeRect(10, 10, 100, 100);
    // 3 上色 
    context.draw();
复制代码

效果

1569657340868
1569657340868

画圆弧

CanvasContext.arc(number x, number y, number r, number sAngle, number eAngle, boolean counterclockwise)

CanvasContext.arc(圆心的横坐标X,圆心的纵坐标Y, 半径的长度, 开始的弧度, 结束的弧度, ?是否反向来画)

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  drawArc() {
    // 1 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    // context.arc(圆心的横坐标X,圆心的纵坐标Y, 半径的长度, 开始的弧度, 结束的弧度);
    // 2 调用内置的画 “圆弧” 的方法
    context.arc(100, 100, 100, this.angleToArc(0), this.angleToArc(90));
    // 3 开始描边
    context.stroke();
    // 4 上色
    context.draw();
  },
  /**
   * 将角度转为弧度
   * @param {number} angle 角度
   */
  angleToArc(angle) {
    return angle * Math.PI / 180;
  }
复制代码

效果

1569657957559
1569657957559

画实心的矩形

CanvasContext.fillRect(number x, number y, number width, number height)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 1 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    // 2 调用canvas内置的 画填充 “矩形”的方法
    context.fillRect(10, 10, 100, 100);
    // 3 上色 
    context.draw();
复制代码

效果

1569658217231
1569658217231

画文字

CanvasContext.strokeText(string text, number x, number y, number maxWidth)

CanvasContext.strokeText(要绘制的文本, 文本起始点的 x 轴坐标, number y, 需要绘制的最大宽度,可选)

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 1 获取画布上下文对象
    const context = wx.createCanvasContext("firstCanvas");
    // 2 画 “文字”
    context.strokeText("hello world", 100, 100);
    // 3 上色 
    context.draw();
复制代码

效果

1569658659539
1569658659539

设置样式

经过以上的演示我们也发现,线条的颜色一直是黑色,这肯定是无法满足我们骚跳的心的。现在来学习一下关于设置canvas线条样式相关API

  1. 设置线条颜色
  2. 设置线条粗细
  3. 设置填充颜色
  4. 设置文本大小

设置线条颜色

**特别要注意 **,setStrokeStyle是个函数,1.9.90版本后停止维护,使用以下的方式来修改。

  1. CanvasContext.setStrokeStyle("red") 已过时,不推荐
  2. CanvasContext.strokeStyle="red"; 正解

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const context = wx.createCanvasContext("firstCanvas");
    context.moveTo(10, 10);
    context.lineTo(300, 150);
    // 5 修改颜色 需要在stroke之前修改
    context.strokeStyle = "red";
    context.stroke();
    context.draw();
复制代码

效果

1569663241332
1569663241332

设置线条粗细

**特别要注意 **,setLineWidth 是个函数,1.9.90版本后停止维护,使用以下的方式来修改。

  1. CanvasContext.setLineWidth(20) 已过时,不推荐
  2. CanvasContext.lineWidth=20; 正解

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const context = wx.createCanvasContext("firstCanvas");
    context.moveTo(10, 10);
    context.lineTo(300, 150);
    // 设置线条宽度
    context.lineWidth = 20;
    context.stroke();
    context.draw();
复制代码

效果

1569663745450
1569663745450

设置填充颜色

**特别要注意 **,setFillStyle 是个函数,1.9.90版本后停止维护,使用以下的方式来修改。

  1. CanvasContext.setFillStyle("red") 已过时,不推荐
  2. CanvasContext.fillStyle="red"; 正解

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const context = wx.createCanvasContext("firstCanvas");
    // 设置填充颜色
    context.fillStyle = "red";
    context.fillRect(10, 10, 100, 100);
    context.draw();
复制代码

效果

1569663956116
1569663956116

设置文本大小

**特别要注意 **,setFontSize 是个函数,1.9.90版本后停止维护,使用以下的方式来修改。

  1. CanvasContext.setFontSize("20") 已过时,不推荐
  2. CanvasContext.font="sans-serif"; 正解
  3. font 当前字体样式的属性。符合 CSS font 语法 的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const context = wx.createCanvasContext("firstCanvas");
    // 必须要同时提供 字号 和 字体
    context.font="10px  sans-serif";
    context.strokeText("10px", 10, 10);
    // 必须要同时提供 字号 和 字体
    context.font="50px  sans-serif";
    context.strokeText("50px", 50, 100);
    // 必须要同时提供 字号 和 字体
    context.font="80px  sans-serif";
    context.strokeText("80px", 80, 180);
    context.draw();
复制代码

效果

1569664436438
1569664436438

进阶

在本环节主要讲解稍微复杂一点的功能。要实现以下功能 但是需要先做一点技术铺垫

主要用到的api有:

  1. 获取系统信息
  2. 选择相册图片
  3. 获取网络图片信息
  4. canvas 描绘 图片到画布上
  5. 将画布保存成一张图片
  6. 将图片下载到本地
1569678652709
1569678652709

基本API

以下api是实现以上案例所必须的

获取系统信息

获取屏幕大小、设备像素比等

代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.getSystemInfo({
  success (res) {
    console.log(res.model)
    console.log(res.pixelRatio)
    console.log(res.windowWidth)
    console.log(res.windowHeight)
    console.log(res.language)
    console.log(res.version)
    console.log(res.platform)
  }
})
复制代码

选择相册图片

从本地相册选择图片或使用相机拍照

代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.chooseImage({
  count: 1,// 最多可以选择的图片张数
  sizeType: ['original', 'compressed'],// 所选的图片的尺寸
  sourceType: ['album', 'camera'],//  选择图片的来源
  success (res) {
    // tempFilePath可以作为img标签的src属性显示图片
    const tempFilePaths = res.tempFilePaths
  }
})
复制代码
代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.getSystemInfo({
  success (res) {
    console.log(res.model)
    console.log(res.pixelRatio)
    console.log(res.windowWidth)
    console.log(res.windowHeight)
    console.log(res.language)
    console.log(res.version)
    console.log(res.platform)
  }
})
复制代码

获取网络图片信息

获取图片信息。网络图片需先配置download域名才能生效。

canvas提供了将图片画到画布上的功能,但是要求所提供的图片必须是外网下的图片 因此可以借助该方法将网络图片变成本地图片,同时返回该图片的信息

代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.getImageInfo({
  src: 'cloud://c-73e071.632d-c-73e071/92637.jpg',
  success (res) {
    console.log(res.width)
    console.log(res.height)
  }
})
复制代码
绘制图像到画布

不能使用本地图片,要使用外网图片的 必须要先 使用 wx.getImageInfo 下载到本地

有三个版本的写法:

  • drawImage(imageResource, dx, dy)
  • drawImage(imageResource, dx, dy, dWidth, dHeight)
  • drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
  • 说明drawImage(图片路径, 原图的x, 原图的y, 原图的宽度, 原图的高度, 画布的x, 画布的y, 画多宽, 画多高)
代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
context.drawImage('xxxx.jpg', 0, 0,100, 100);
复制代码

将画布保存成一张图片

draw() 回调里调用该方法才能保证图片导出成功

代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.canvasToTempFilePath({
  x: 100,
  y: 200,
  width: 50,
  height: 50,
  destWidth: 100,
  destHeight: 100,
  canvasId: 'myCanvas',
  success(res) {
    console.log(res.tempFilePath)
  }
})
复制代码

将图片下载到本地

保存图片到系统相册

代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.saveImageToPhotosAlbum({
  success(res) { }
})
复制代码

案例实现

其实要实现一样案例,最麻烦的不是这些API的调用,而是如何根据不同的图片,合成比例合适不模糊的图片

为什么说比例合适

因为在canvas中,只支持 px 单位,那么在使用javascript来描绘图片时,就不存在 rpxvw%这些相对单位了。只能依靠手动来计算。如,在 canvas中,画出一个大小为 屏幕宽的一半 屏幕高的一半的矩形?

为什么说不模糊

问题的原因还是因为 手机的屏幕 都是高清屏,具体的原因可以参照 链接

如我们想要生成图片大小为 100px * 100px,那么就需要将 canvas的大小设置为 width = 图片的宽度 * 设备像素比

height = 图片的高度 * 设备像素比

文件目录

  1. index 首页
  2. result 合成图片的页面
1569681221628
1569681221628

首页 index

index
1569681395410
1569681395410
pages/index/index.wxml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 用来显示 被选择的图片的 -->
<image mode="widthFix" src="{{src}}"></image>
<!-- 选择相册图片 -->
<button bindtap="handleTap">选择图片</button>
<!-- 跳转到 结果页面 -->
<button bindtap="handleCreateFlag">生成小红旗</button>
复制代码
pages/index/index.js

主要实现3个功能

  1. 点击 “选择图片” 将选择的图片打印到页面上
  2. 将被 选择的图片 显示的页面上
  3. 点击 “生成红旗”,跳转到结果页面(在结果页面完成生成)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({
  data: {
    src: ""
  },
  // 选择图片
  handleTap() {
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success: (result) => {
        this.setData({
          src: result.tempFilePaths[0]
        })
        // 保存图片路径
        wx.setStorageSync('src', this.data.src);
      }
    });
  },
  // 生成红旗
  handleCreateFlag() {
    // 跳转到结果页面
    wx.navigateTo({
      url: '/pages/result/index'
    });
  }
})
复制代码

结果页面 result

result
1569681567259
1569681567259
result/index.wxml

3个标签

  1. canvas 标签,通过定位将其隐藏
  2. image 标签,用来显示合成的图片
  3. button 标签,用来点击 下载图片
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- canvas 标签-->
<canvas class="cas" style="width:{{canvasWidth}};height:{{canvasHeight}};" canvas-id="firstCanvas"></canvas>
<!-- 用来显示 合成成功的图片 -->
<image class="res_image" mode="widthFix" src="{{resSrc}}"></image>
<!-- 点击下载图片 -->
<button bindtap="handleSave">下载图片</button>
复制代码
result/index.wxss

两个样式

  1. 把canvas藏起来(因为是 原生组件,所以它的层级比一般的标签都要高(定位+zindex也无法解决))
  2. 设置图片标签的样式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page {
  overflow-x: hidden;
  overflow-y: auto;
  width: 100vw;
  height: 100vh;
}
.cas {
  position: absolute;
  top: 1000vw;
  left: 1000vh;
  z-index: -1;
  opacity: 0;
}
.res_image {
  width: 100%;
  display: block;
}

复制代码
result/index.js

易错点:

  1. 外网的图片,需要先将图片服务器添加到白名单中(否则真机调试会失败)
  2. 没有动态设置 canvas的宽和高(参照第29、31行)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import regeneratorRuntime from '../../lib/runtime/runtime';
import { getImageInfo, canvasToTempFilePath, saveImageToPhotosAlbum } from "../../wxAsync/index.js";
Page({
  data: {
    // 默认的canvas的宽度
    canvasWidth: 1,
    // 默认的canvas高度
    canvasHeight: 1,
    // 最终生成的图片路径
    resSrc: ""
  },
  // 全局变量
  saveImgSrc: "",
  async onLoad() {
    // 红旗图片
    const flagSrc = "https://632d-c-73e071-1252056196.tcb.qcloud.la/3434.jpg?sign=a4f1c2106d1e61551829c2f99820c0ba&t=1569678566";
    // const baseSrc = "https://632d-c-73e071-1252056196.tcb.qcloud.la/92637.jpg?sign=8952d1eaa69a35510418fe25dc25d6c5&t=1569678606";
    // 上个页面选择的图片路径 柯南图片
    const baseSrc = wx.getStorageSync("src");
    // 设备像素比
    const { pixelRatio } = wx.getSystemInfoSync();

    // 获取 画布实例
    const context = wx.createCanvasContext('firstCanvas');
    console.log(context);
    // 下载到本地的 柯南图片
    const baseImg = await getImageInfo(baseSrc);
    // 下载到本地的 红旗图片
    const flagImg = await getImageInfo(flagSrc);
    // 将canvas的宽度设置中 图片的宽度
    const canvasWidth = baseImg.width + "px";
    // 将canvas的宽度设置中 图片的高度
    const canvasHeight = baseImg.height + "px";
    //  setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。
    // 因此需要将 描绘 图片的步骤写在回调中,否则 真机调试有bug!
    this.setData({ canvasWidth, canvasHeight }, () => {
      // 如果个别机型出现图片失败错误,可以加上定时器。
      setTimeout(() => {
        // 先将柯南 描绘到画布上
        context.drawImage(baseImg.path, 0, 0, baseImg.width, baseImg.height);
        // 把红旗 描绘到画布上
        context.drawImage(flagImg.path, baseImg.width - (pixelRatio * 50), baseImg.height - (pixelRatio * 50), (pixelRatio * 50), (pixelRatio * 50));
        context.draw(true, async () => {
          // 将 画布生成 成图片
          const res1 = await canvasToTempFilePath({
            canvasId: "firstCanvas"
          });
          // 让图片显示 合成后的效果
          this.setData({ resSrc: res1.tempFilePath })
          // 保存起来,当点击保存图片时调用
          this.saveImgSrc = res1.tempFilePath;
        });
      }, 100);
    });
  },

  // 点击保存图片
  handleSave() {
    saveImageToPhotosAlbum(this.saveImgSrc);
  }
})

复制代码

github地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/itcastWsy/AppletPoster.git
复制代码
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
小程序 canvas 生成海报 一次搞掂
需要注意的是,目前的canvas可以简单分为两种。一种是传统网页中的canvas,一种是小程序中的canvas。两者的功能是完全一样的。只是标签的样式,和 api 略有区别而已。目前我们主要讲解小程序中的canvas。
万少
2025/02/11
2630
小程序 canvas 生成海报 一次搞掂
微信小程序官方组件展示之画布canvas源码
以下将展示微信小程序之画布canvas源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。
软件事业部
2022/10/28
9520
看微信小程序 wx.canvasToTempFilePath 方法之巨坑的解决之道
当然这个项目是可以用的,但是生成不了图片,打开 tempFilePath直接报错,发现了什么原因了吗?
全科
2018/08/15
4.4K0
利用云开发优化博客小程序(三)——生成海报功能
周末花了点时间把小程序版博客中的生成海报的功能给完成了,对于新手的我来说遇到的问题还是挺多的,这里简单记录下坑。
Bug生活2048
2018/10/18
1.1K0
利用云开发优化博客小程序(三)——生成海报功能
第九十期:一个小程序生成海报的问题
最近还是在做基于ts+taro的小程序开发,有个前端生成海报的需求。本来想着这个需求很简单,因为之前写过这个功能,基本的逻辑就是产品图片地址和小程序码图片地址下载到本地,然后通过createCanvasContext()这个方法拿到canvas的上下文,进行绘制即可。
terrence386
2022/07/15
5500
小程序上传图片加水印
注意事项: 1.如果在画图完成后,有对应操作时,必须在draw的callback后执行,比如图片预览、改变画布大小等 ctx.draw(false, function() { console.log(‘后续操作’);
全栈程序员站长
2022/07/04
1.2K0
「强烈建议收藏」小程序canvas绘制带二维码海报全流程(枚举踩坑,详解解决方案)
接下来,我会把纯前端实现生成带二维码的海报全流程给大家讲个明明白白,把我自己遇到的坑,给大家详细分享并讲解,防止大家遇到相似问题,即使遇到问题,也会有一个明确的方向,并且吐血建议大家收藏一波,以备不时之需。(你不能保证以后的需求,没有类似的吧,有的话,记得翻出来看看)
用户6835371
2021/06/01
3.8K0
「强烈建议收藏」小程序canvas绘制带二维码海报全流程(枚举踩坑,详解解决方案)
轻松生成小程序分享海报的神器来了
小程序是一种不用下载就能使用的应用,也是一项门槛非常高的创新,经过将近两年的发展,已经构造了新的小程序开发环境和开发者生态。小程序越来越火爆,基于微信的各类小程序优秀项目真实层出不穷,小程序商城更是成为了企业商家的标配,
用户7690885
2021/04/20
8820
微信小程序|实现简单动态画布
大家都玩过游戏,有没有想过游戏中的人物是怎么动起来的?人物是由很多的图形构成的,我们需要画出这些图形然后再赋予时间,就可以让他动起来。那么如何在小程序上让简单的图动起来呢?
算法与编程之美
2020/08/20
1.6K0
微信小程序|实现简单动态画布
开发小程序的一些小经验
图片在微信小程序中可以说是一个神奇的存在。在web开发中,我们会利用图片的自适应比如百分比而省去不少麻烦,因为高度会自适应。但是小程序中的图片都有一个初始大小,而且是固定的,无论你的图片多大多小,都是统一的320px*240px。虽然作为组件的图片支持平铺,剪切等呈现效果,但是容器大小都是固定的,所以每次使用image我们要想办法控制图片的大小。
小美娜娜
2019/04/04
9100
开发小程序的一些小经验
轻松生成小程序分享海报
小程序分享到朋友圈只能使用小程序码海报来实现,生成小程序码的方式有两种,一种是使用后端方式,一种是使用小程序自带的canvas生成;后端的方式开发难度大,由于生成图片耗用内存比较大对服务端也是不小的压力;所以使用小程序的canvas是一个不错的选择,但由于canvas水比较深,坑比较多,还有不同海报需要重现写渲染流程,导致代码冗余难以维护,加上不同设备版本的情况不一样,因此小程序海报生成组件的需求十分迫切。
honey缘木鱼
2018/09/26
2.6K0
轻松生成小程序分享海报
小程序如何生成海报分享朋友圈
项目需求写完有一段时间了,但是还是想回过来总结一下,一是对项目的回顾优化等,二是对坑的地方做个记录,避免以后遇到类似的问题。
super.x
2019/07/02
1.5K0
【小程序】728- 小程序如何生成海报分享朋友圈
https://segmentfault.com/a/1190000019083548
pingan8787
2020/09/30
1.4K0
【小程序】728- 小程序如何生成海报分享朋友圈
【零基础微信小程序】基于百度大脑人像分割的证件照换底色小程序实战开发
通过小程序配合百度的人体分割接口进行简单的照片渲染,本期做一个小工具,对学生党、工作人员、打印店铺以及涉及到求职简历办公等需求的人员都很有用,这个项目由于一些原因不再做维护了,于是打算出个教程将证件照小程序分享给大家,这里采用百度AI接口是因为现在网上开源的py脚本对边缘计算不是很优秀,会有很多模糊点没办法处理,识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景。输入正常人像图片,返回分割后的二值结果图、灰度图、透明背景的人像图(png格式);并输出画面中的人数、人体坐标信息,可基于此对图片进行过滤、筛选。百度在这方便做得很好,细致化到发丝,并且免费!!
德宏大魔王
2023/08/08
7760
【零基础微信小程序】基于百度大脑人像分割的证件照换底色小程序实战开发
wx-caman——基于 CamanJS 的微信小程序 Canvas 像素级滤镜处理库
做这个项目的初衷是希望能够开发一款不依赖服务端而纯通过客户端渲染为图片添加滤镜的小程序。但是由于微信小程序中的 canvas 组件与 DOM Canvas 元素有较大差异,因此传统的 Canvas 处理库几乎无法在小程序中使用。在调研了一些传统浏览器端的项目后,我发现 CamanJS 的功能比较完善,同时也比较容易对微信小程序进行适配。在阅读完毕 CamanJS 源码(顺便学习了一下 CoffeeScript)以及学习了小程序的 canvas 组件的条条框框之后,wx-caman 就诞生了。wx-caman 由 CamanJS 封装而来,基于 ES6 进行了重写,并针对微信小程序进行了适配。其使用基本与 CamanJS 保持一致,同时剔除了无关功能,能够对小程序中的 canvas 进行像素级别的图像滤镜处理。
逆葵
2019/04/25
1.2K0
微信小程序|简单易上手的画板功能
大部分安卓用户的手机里是没有自带画板功能的,而在近期网课盛行之时,一个随手可用的手写面板,无论是在写笔记方面,还是在辅助授课方面,一个小画板就体现出了很大的作用。那么这个功能应该如何来实现呢?
算法与编程之美
2020/04/15
2.1K0
微信小程序操作蓝牙打印机3-图片处理原理
我们知道图像是由一个个像素组成的,一个彩色的点由RGB三色组成的。在微信小程序中再加一个alpha
加菲猫的VFP
2021/08/16
1.6K0
小程序Canvas实践指南
导语 总结在小程序canvas开发实践中遇到的一些问题和解决方法。 1. 什么是 Canvas? 在 MDN 是这样定义 canvas 的: canvas 是 HTML5 新增的元素,可用于通过使用 JavaScript 中的脚本来绘制图形。例如,它可以用于绘制图形、制作照片、创建动画,甚至可以进行实时视频处理或渲染。 Canvas 是由 HTML 代码配合高度和宽度属性而定义出的可绘制区域。JavaScript 代码可以访问该区域,类似于其他通用的二维 API,通过一套完整的绘图函数来动态生成图形。
腾讯VTeam技术团队
2020/10/14
3.9K0
微信小程序之生成图片分享
通过社交软件分享的方式来进行营销小程序,是一个常用的运营途径。小程序本身支持直接将一个小程序的链接卡片分享至微信好友或微信群,然后别人就可以通过点击该卡片进入该小程序页面。但是小程序目前不支持直接分享到微信朋友圈,而对我们来说,微信朋友圈又是一个很重要的吸引别人关注的入口,所以,得想办法把这个资源利用起来。
一斤代码
2018/08/21
4.9K0
微信小程序之生成图片分享
小程序的页面生成图片分享朋友圈
1.网络图片要下载到本地,就是getimginfo和promise,具体技术细节我也不晓得。然后就是本地图片的地址和网络图片的地址不同。本地的要加../../images/+res[0].path,而网络的直接是res[0].path。本机调试看不出来,用真机调试比较容易发现问题。
hotqin888
2018/10/15
4.5K0
推荐阅读
相关推荐
小程序 canvas 生成海报 一次搞掂
更多 >
LV.1
传智播客课程研究员
目录
  • 小程序 canvas 生成海报 - 解决屏幕图片失真,解决无法使用外网图片
    • 最终结果
    • 注意
  • canvas 的应用场景
  • 简单体验
    • 编写标签
    • 获取画布实例
    • 点起点
    • 定终点
    • 连线
    • 上色
    • 完整代码
    • 效果
  • 内置的其他规则图形
    • 画矩形
      • 效果
    • 画圆弧
      • 代码
      • 效果
    • 画实心的矩形
      • 效果
    • 画文字
      • 代码
      • 效果
  • 设置样式
    • 设置线条颜色
      • 代码
      • 效果
    • 设置线条粗细
      • 代码
      • 效果
    • 设置填充颜色
      • 代码
      • 效果
    • 设置文本大小
      • 代码
      • 效果
  • 进阶
    • 基本API
      • 获取系统信息
      • 选择相册图片
      • 获取网络图片信息
      • 将画布保存成一张图片
      • 将图片下载到本地
    • 案例实现
      • 为什么说比例合适
      • 为什么说不模糊
      • 文件目录
      • 首页 index
      • 结果页面 result
  • github地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档