0.2.0 • Published 4 years ago

vue-canvas-poster-yufan v0.2.0

Weekly downloads
6
License
MIT
Repository
-
Last release
4 years ago

vue-canvas-poster-yufan

一个基于vue+canvas通过类CSS数据生成canvas图片的组件 (・(ง •_•)ง゚✧ A super easy create canvas poster for Vue!)

生成效果

生成一个简单海报图片

安装

npm i vue-canvas-poster-yufan

使用组件

注册
// 全局
import canvasPoster from 'vue-canvas-poster-yufan'
Vue.use(canvasPoster)
使用
// 页面
<canvas-poster :drawData="drawData" @success="success"></canvas-poster>
     {
        width: 360,
        height: 667,
        backgroundColor: '#fff',
        views: [
          // 绘制本地图片
          {
            type: 'image',
            url: require('./assets/bold.png'), // 远程图片可以直接改为图片地址
            top: 0,
            left: 0,
            width: 360,
            height: 667,
          },
          // 绘制带圆角+边框的图片
          {
            type: 'image',
            url: require('./assets/header.jpg'),
            top: 58,
            left: 165,
            width: 30,
            height: 30,
            borderRadius: 5,
            borderWidth: 2,
            borderColor: '#f0efefea',
          },
          // 绘制文字
          {
            type: 'text',
            content: 'vue-canvas-poster-yufan简单快速的绘制canvas海报~~这是一段比较长的标题文字',
            fontSize: 14,
            color: '#f7f7f7',
            textAlign: 'center',
            top: 262,
            left: 180,
            width: 200,
            lineNum: 3,
            lineHeight: 20,
            baseLine: 'top',
          },
          // 绘制二维码
          {
            type: 'qcode',
            text: 'https://github.com/whorcare/vue-canvas-poster-yufan',
            top: 420,
            left: 135,
            width: 90,
            height: 90,
          },
          // 绘制一条分割线
          {
            type: 'line',
            color: '#999',
            startX: 30,
            startY: 580,
            endX: 330,
            endY: 580,
            width: 2,
            lineCap: 'round',
          },
          // 绘制一个简易矩形
          {
            type: 'rect',
            width: 200,
            height: 200,
            x: 20,
            y: 50,
            paddingLeft: 10,
            paddingRight: 10,
            backgroundColor: '#fff',
          },
      }

API

drawData(数据)

属性含义类型默认值是否必填
width生成图片宽度Number
height生成图片高度Number
backgroundColor背景颜色String#ffffff
debug是否开启调试模式Booleanfalse
views绘制核心数据(数组对象 见下表)Array

image字段(绘制图片)

属性含义默认值是否必填
url图片地址 支持远程图片 & 本地图片:require('./assets/x.png')" "
top图片距离顶部距离0
left图片距离左边距离0
width图片宽度0
height图片高度0
borderRadius图片圆角0
borderWidth图片边框0
borderColor图片边框颜色

text字段(绘制文字)

属性含义默认值可选值是否必填
top文字距离顶部距离0
left文字距离左边距离0
content文字内容''
fontSize文字字号(px)16
color文字颜色#000
baseLine文字基线对齐bottomtop middle bottom
textAlign文字对齐leftleft center right
opacity透明度10-1
width文字最大长度
lineNum文字最大折行数1
lineHeight文字行高0
fontWeight文字加粗normal100-900
fontFamily文字字体Microsoft YaHei

line字段(绘制线段)

属性含义默认值可选值是否必填
startX开始坐标X
startY开始坐标Y
endX结束坐标X
endY结束坐标Y
color线颜色#000
width线粗细1
lineCap设置结束端点样式buttbutt round square

rect字段(绘制矩形 内部可添加文字)

属性含义默认值是否必填
width矩形宽度
height矩形高度
x开始坐标X
y开始坐标Y
text文字(对象 参数见字段text)
paddingLeft左内边距0
paddingRight右内边距0
borderWidth边框宽度0
backgroundColor背景颜色
borderColor边框颜色
borderRadius圆角0
opacity透明度1

qcode 字段(绘制图片)

属性含义默认值是否必填
text二维码内容(链接 或者 文字)" "
top二维码距离顶部距离0
left二维码距离左边距离0
width二维码宽度200
height二维码高度200
background背景色#fff
foreground区块色#000
padding内边距 (0为无内边距)5

方法

success(src) {
  // 返回base64图片
  console.log(src)
}

注意

关于canvas图片跨域

图片跨域暂时未完全解决,远程图片地址推荐使用同域名,不然会报错

相关参考

  1. react-canvas-poster 作者:也是俺自己
  2. canvas图片跨域怎么办
  3. wxa-plugin-canvas 作者:jasondu
  4. 绘制圆角矩形 作者:YvetteLau
  5. 贝塞尔曲线 作者:hujiulong

持续开发中的功能...

  • box-shadow 绘制阴影
  • Bezier curve 贝塞尔曲线
  • 可选类型图片导出
  • ...

版本迭代

  • v0.2.0 新增了二维码 & 修复了有时图片加载失败的bug
  • v0.1.14 修复了自定义字体加载无效的bug

如果你觉得这个项目有趣 不妨给个star~ (҂‾ ▵‾)σ(˚▽˚’!)/

给我star~

交流

有什么意见,或者bug 或者想一起开发vue-canvas-poster-yufan(备注:github)

我的微信

ISS

提iss