npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@huteming/ui-canvas-draw

v2.1.5

Published

> 封装 canvas 方法,便于画图导出图片

Downloads

2

Readme

封装 canvas 方法,主要是解决了 canvas 在不同分辨率中显示可能模糊的问题。并封装了一些原生方法,方便调用导出图片

引入

import { CanvasDraw } from '@huteming/ui'

代码演示

基础用法

const instance = new CanvasDraw(750, 1109)

// instance.onerror(console.error)
instance.add(({ context, canvas, ratio, width, height }) => {
    instance.drawText('hello world', 24, 93)
})

const src = instance.done('png')

高斯模糊

const instance = new CanvasDraw(750, 1109)

instance.add(({ context, canvas, ratio, canvasWidth, canvasHeight }) => {
    const x = 52
    const y = 424
    const width = 552
    const height = 177
    const r = '20 20 -20 -20'

    const blurryCanvas = instance.getBlurryArea(100, x, y, width, height)
    // 创建不规则区域然后将模糊图像渲染
    instance.drawRect(x, y, width, height, { r })
    context.clip()
    instance.drawImage(blurryCanvas, x, y, width, height)
    instance.drawRect(x, y, width, height, { r, color: 'rgba(255, 255, 255, 0.62)' })
})

const src = instance.done('png')

删除线

const instance = new CanvasDraw(750, 1109)

instance.add(() => {
    instance.drawText('<through>删除线</through>', x, y, optionsText)
})

const src = instance.done('png')

下划线

const instance = new CanvasDraw(750, 1109)

instance.add(() => {
    instance.drawText('<underline>下划线</underline>', x, y, optionsText)
})

const src = instance.done('png')

API

构造函数参数

| name | 描述 | 默认参数 | |------|--------|-------| | width | 设计稿上画布宽度 | | | height | 设计稿上画布高度 | | | optionsCanvas | 配置 | |

实例方法

| name | 描述 | 参数 | |------|--------|-------| | add | 执行callback前后分别执行 save, restore 方法 | Function: callbackDraw({ context, canvas, ratio, width, height }) | | onerror | 异常处理.默认为 console.error | Error | | done | 导出图片 | Object: optionsDone |

实例辅助绘图方法

| name | 描述 | 参数 | |------|--------|-------| | drawArc | 圆形 | x, y, r, optionsArc | | drawRect | 矩形 | x, y, width, height, optionsRect | | drawText | 文本 | text, x, y, optionsText | | drawLine | 直线 | startX, startY, endX, endY, optionsLine | | drawImage | 图片 | image, x, y, width, height | | getBlurryArea | 创建高斯模糊区域 | radius, x, y, width, height |

optionsDone

| 参数 | 描述 | 可选值 | 默认值 | |----------|----------|-----------|-----------| | type | 导出图片类型 | jpg | png | png |

optionsCanvas

| name | 描述 | 默认值 | |------|--------|-------| | designWidth | 设计稿标准总宽度, 单位: px | 750 |

optionsArc

| 参数 | 描述 | 默认值 | |-------|----------|---------| | startDegrees | 开始角度 | 0 | | endDegrees | 结束角度 | 360 | | direction | 方向。false: 顺时针, true: 逆时针 | false | | lineWidth | 画笔宽度 | 1 | | color | 画笔颜色 | #000 | | type | 画笔类型, fill, stroke | fill |

optionsRect

| 参数 | 描述 | 默认值 | |-------|----------|---------| | r | 圆角半径 | 0 | | lineWidth | 画笔宽度 | 1 | | color | 画笔颜色 | #000 | | type | 画笔类型, fill, stroke | fill |

optionsText

| 参数 | 描述 | 默认值 | |-------|----------|---------| | fix | 过长省略时添加字符串 | '.... ' | | maxWidth | 最长宽度,会在末尾加上 fix 字符串,一般搭配前缀 后缀使用 | Infinity | | style | 字体的风格 normal, italic, oblique | normal | | variant | 字体变体 normal, small-caps | normal | | weight | 字体的粗细 bold bolder lighter 100 200 300 400 500 600 700 800 900 | normal | | size | 字号 | 24 | | lineHeight | 行高, 若不存在,则在运行时会重置为 size * 1.5 | 0 | | align | 对齐方式 start, end, center, left, right | start | | baseline | 文本基线, alphabetic, top, hanging, middle, ideographic, bottom | top | | letterSpacing | 字体间距 | 0 | | lineWidth | 画笔宽度 | 1 | | wrap | 换行次数,不包括第一行。true => Infinity; false => 0 | 0 | | shadowColor | 阴影颜色 | - | | shadowOffsetX | 阴影 | 0 | | shadowOffsetY | 阴影 | 0 | | shadowBlur | 阴影 | 0 | | color | 画笔颜色 | #000 | | type | 画笔类型, fillText, strokeText | fillText | | underline | 下划线参数 | { left: 10, right: 10, bottom: 6, dashed: [], lineWidth: 1 } |

optionsLine

| 参数 | 描述 | 默认值 | |-------|----------|---------| | lineWidth | 画笔宽度 | 1 | | color | 画笔颜色 | #000 |