Giter VIP home page Giter VIP logo

wxa-plugin-canvas's Introduction

wxa-plugin-canvas

小程序组件-小程序海报组件 npm npm

概述

wxa-plugin-canvas是一个生成二维码海报的组件,通过非常简单的配置就可以生成精美的海报

生成效果

组件原理说明文章

https://juejin.im/post/5b7e48566fb9a01a1059543f

使用之前

使用 wxa-plugin-canvas 前,请确保你已经学习过微信官方的 小程序简易教程 和 自定义组件介绍

安装

方式一.通过 npm 安装 (推荐)

小程序已经支持使用 npm 安装第三方包,详见 npm 支持

# npm
npm i wxa-plugin-canvas -S --production

# yarn
yarn add wxa-plugin-canvas --production

方式二.下载代码

直接通过 git 下载 wxa-plugin-canvas 源代码,并将miniprogram_dist目录拷贝到自己的项目组件目录中

使用组件

{
  "usingComponents": {
	"poster": "wxa-plugin-canvas/poster",
  }
}

接着就可以在 wxml 中直接使用组件

<poster id="poster" config="{{posterConfig}}" bind:success="onPosterSuccess" bind:fail="onPosterFail">
    <button>点击生成海报</button>
</poster>

使用注意事项

  1. 图片的域名务必添加到downloadFile合法域名中(开发设置-服务器域名-downloadFile合法域名)
  2. 如果要使用异步生成海报的方法,务必组件要加上 id="poster"

组件参数解释

config字段

字段 类型 必填 描述
width Number(单位:rpx) 画布宽度
height Number(单位:rpx) 画布高度
backgroundColor String 画布颜色
debug Boolean false隐藏canvas,true显示canvas,默认false
pixelRatio Number 1为一般,值越大越清晰
preload Boolean true:图片资源预下载 默认false
hide-loading Boolean true:隐藏loading 默认false
blocks Object Array(对象数组) 看下文
texts Object Array(对象数组) 看下文
images Object Array(对象数组) 看下文
lines Object Array(对象数组) 看下文

blocks字段

字段名 类型 必填 描述
x Number(单位:rpx) 块的坐标
y Number(单位:rpx) 块的坐标
width Number(单位:rpx) 如果内部有文字,由文字宽度和内边距决定
height Number(单位:rpx)
paddingLeft Number(单位:rpx) 内左边距
paddingRight Number(单位:rpx) 内右边距
borderWidth Number(单位:rpx) 边框宽度
borderColor String 边框颜色
backgroundColor String 背景颜色
borderRadius Number(单位:rpx) 圆角
text Object 块里面可以填充文字,参考texts字段解释
zIndex Int 层级,越大越高

texts字段

字段名 类型 必填 描述
x Number(单位:rpx) 坐标
y Number(单位:rpx) 坐标
text String|Object 当Object类型时,参数为text字段的参数,marginLeft、marginRight这两个字段可用(示例请看下文)
fontSize Number(单位:rpx) 文字大小
color String 颜色
opacity Int 1为不透明,0为透明
lineHeight Number(单位:rpx) 行高
lineNum Int 根据宽度换行,最多的行数
width Number(单位:rpx) 没有指定为画布宽度
marginLeft Number(单位:rpx) 当text字段为Object可以使用,用来控制多行文字间距
marginRight Number(单位:rpx) 当text字段为Object可以使用,用来控制多行文字间距
textDecoration String 目前只支持 line-through(贯穿线),默认为none
baseLine String top| middle|bottom基线对齐方式
textAlign String left|center|right对齐方式
zIndex Int 层级,越大越高
fontFamily String 小程序默认字体为'sans-serif', 请输入小程序支持的字体,例如:'STSong'
fontWeight String 'bold'加粗字体,目前小程序不支持 100 - 900 加粗
fontStyle String 'italic'倾斜字体

images字段

字段 类型 必填 描述
x Number(单位:rpx) 右上角的坐标
y Number(单位:rpx) 右上角的坐标
url String 图片url(需要添加到下载白名单域名中)也支持本地图片
width Number(单位:rpx) 宽度(会根据图片的尺寸同比例缩放
height Number(单位:rpx) 高度(会根据图片的尺寸同比例缩放
borderRadius Number(单位:rpx) 圆角,跟css一样
borderWidth Number(单位:rpx) 边框宽度
borderColor String 边框颜色
zIndex Int 层级,越大越高

lines字段

字段 类型 必填 描述
startX Number(单位:rpx) 起始坐标
startY Number(单位:rpx) 起始坐标
endX Number(单位:rpx) 终结坐标
endY Number(单位:rpx) 终结坐标
width Number(单位:rpx) 线的宽度
color String 线的颜色
zIndex Int 层级,越大越高

事件

success

返回生成海报图片的本地url,一般做法是使用wx.previewImage预览海报,如下

onPosterSuccess(e) {
	const { detail } = e;
	wx.previewImage({
        current: detail,
        urls: [detail]
    })
}

fail

返回错误信息

异步生成海报

有些场景可能需要发起ajax请求后才能获取生成海报的数据,这里提供了异步生成海报的方式。

只需要引入组件中的poster/poster.js,如下调用就行了

import Poster from '../../miniprogram_dist/poster/poster';
Page({
    /**
     * 异步生成海报
     */
    onCreatePoster() {
    	// setData配置数据
    	this.setData({ posterConfig: {...} }, () => {
        	Poster.create(); 
    	});
    }
})

自定义组件异步生成海报

有些场景可能需要发起ajax请求后才能获取生成海报的数据,这里提供了异步生成海报的方式。

只需要引入组件中的poster/poster.js,如下调用就行了,与page不同的是,需要在Poster.create中加入this。

import Poster from '../../miniprogram_dist/poster/poster';
Component({
    /**
     * 自定义组件异步生成海报
     */
    onCreatePoster() {
    	// setData配置数据
    	this.setData({ posterConfig: {...} }, () => {
        	Poster.create(true, this); 
    	});
    }
})

赞赏

问题反馈

有什么问题可以直接提issue

提issue

wxa-plugin-canvas's People

Contributors

cherrycola-zjl avatar chuyun avatar dependabot[bot] avatar dlhandsome avatar jasondu avatar jingguangyan avatar mldie avatar shaobeichen avatar xueyan1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wxa-plugin-canvas's Issues

2个疑问?

1、首先这个插件现在审核通过没有
2、支持自定义参数不?获取小程序二维码是不是需要后台

生成的图片尺寸不稳定问题

return {
width: 500,
height: 400,
backgroundColor: '#fff',
debug: false,
borderColor: 'blue',
blocks: [
{
width: 485,
height: 383,
x: 7,
y: 8,
borderWidth: 10,
borderColor: '#CD5145'
}
],
images: [
{
width: 440,
height: 225,
x: 30,
y: 32,
url: "http://image.wulion.com/20180825/15351905175135.o6zAJs2kEQGWHOtjeKTN1qHD08cA",
}
],
texts: [{
x: 30,
y: 296,
baseLine: 'middle',
text: "奖品:锤子手机",
width: 414,
lineNum: 1,
fontSize: 32,
color: '#28354c',
},{
x: 30,
y: 342,
baseLine: 'middle',
text: "人数满 100 人自动开奖",
fontSize: 28,
color: '#8d8d8d',
}]
}

画布上图片画布不成圆形

image
如图,我参数上有配borderRadius,部分参数如下
images: [
{
width: 160,
height: 160,
x: 296,
y: 180,
url: 'https://zy.qutego.com//upload/images/000/000/293/201808/5b861e3aeb9fd.png',
borderRadius:160,
borderWidth:6,
borderColor:'#fff',
zIndex: 2
}
]
为何出现上面情况,有什么解决方法

图片不显示

图片不显示 请求完数据 赋值时 图片不显示 微信:shao-_-feng

Bug: wx.previewImage之后图片卡住了

Hello, @jasondu .

感谢您贡献开源项目,但是我发现了一个问题:
生成图片并使用wx.previewImage预览,返回之后如图:

尝试解决办法去掉:

.canvas.pro {
    /*去掉就没事了*/
    /*position: absolute;*/
    bottom: 0;
    left: 0;
    /*transform: translate3d(-999rpx, 0, 0);*/
}

难道是位置不对了吗,多谢

网络资源图片下载的耗时问题

a、插件绘制的过程中,如果有相关网络资源图。会进行下载... 在这个流程中存在图片下载耗时的问题,对用户体验有点不友好。

b、能否提供一个函数,可以让使用者在页面onLoad函数中调用进行图片预下载。这样可以减少在绘制过程需要先下载网络资源图。

text中的textAlign属性,显示 画出来的不是应该想要的结果

canvas中的textAlign和css中的textAlign处理不一样,css中是文字内容在其元素内的居中方式,而canvas则是x坐标在文本内容的位置。并且center的时候,y左表在文本高度的中间,和想要的结果有出入。
在使用的时候我做了如下的修改:
textArr.forEach((item, index) => {
if (textAlign === 'left') {
this.ctx.fillText(item, this.toPx(x), this.toPx(y + (lineHeight || fontSize) * index) + (lineHeight || fontSize) / 2);
}
else if (textAlign === 'center') {
this.ctx.fillText(item, this.toPx(x + width / 2), this.toPx(y + (lineHeight || fontSize) * index) + (lineHeight || fontSize) / 2);
}
else if (textAlign === 'right') {
this.ctx.fillText(item, this.toPx(x + width), this.toPx(y + (lineHeight || fontSize) * index) + (lineHeight || fontSize) / 2);
}
}),
不知道大神怎么看这个问题

显示有问题

生成海报页面左侧会有遮挡
screenshot_2018-09-26-10-34-43-153_com tencent mm

橙色边框右上角错位。
mmexport1537929278172

真机调试失败

真机调试失败,弹框显示downloadFile:fail url not in domain list(把图片的链接都换成了后台返回的数据,还是会报这个错误)

生成画布以后,原页面保留了画布

你好,我这边测试点击生成画布成功以后, 默认跳出预览,把预览关闭以后, 原页面会保留画布的图片,覆盖了原页面的dom, 6s, ios12系统,请问是什么问题?

img_4605

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.