Skip to content

generateHandwriting

使用 Canvas 将文字渲染为手写体风格图片。文档站 Playground 默认加载内置「钟齐志莽行书」,调用方也可通过 loadHandwritingFont 传入自己的字体文件。

预览

字体加载中…

生成中...
文字
字体

默认使用文档站内置「钟齐志莽行书」。调用方也可通过 loadHandwritingFont + fontFamily 传入自己的字体。

外观
笔迹
画布

前置依赖

依赖参数

参数名类型说明
deps.createCanvas(width: number, height: number) => CanvasLike创建指定大小的 Canvas 对象

自定义字体

使用非系统字体时,需先生成前调用 loadHandwritingFont 加载字体,再在 generateHandwriting 中传入同名 fontFamily

参数名类型说明
deps.loadFont(options: LoadHandwritingFontOptions) => Promise<void>加载字体(浏览器可用 FontFace 实现)

函数签名

typescript
function loadHandwritingFont(
  options: LoadHandwritingFontOptions,
  deps: LoadHandwritingFontDeps
): Promise<void>

function generateHandwriting(
  options: GenerateHandwritingOptions,
  deps: GenerateHandwritingDeps
): GenerateHandwritingResult

const ZHIMANG_XING_FONT_FAMILY = 'ZhiMangXing'

interface LoadHandwritingFontOptions {
  family: string
  source: string | ArrayBuffer
}

interface GenerateHandwritingOptions {
  text: string
  fontFamily?: string
  // ...其他选项见下表
}

使用自定义字体

typescript
import {
  generateHandwriting,
  loadHandwritingFont
} from '@zengchaowu/shared/functions/image/generateHandwriting'

async function browserLoadFont(family: string, source: string | ArrayBuffer) {
  const fontFace = new FontFace(family, typeof source === 'string' ? `url(${source})` : source)
  await fontFace.load()
  document.fonts.add(fontFace)
  await document.fonts.ready
}

await loadHandwritingFont(
  { family: 'MyHandFont', source: '/fonts/MyHandFont.ttf' },
  {
    loadFont: async ({ family, source }) => {
      const fontFace = new FontFace(family, typeof source === 'string' ? `url(${source})` : source)
      await fontFace.load()
      document.fonts.add(fontFace)
      await document.fonts.ready
    }
  }
)

const result = generateHandwriting(
  {
    text: '你好,世界',
    fontFamily: 'MyHandFont',
    variation: 0.3
  },
  { createCanvas }
)

传入 fontFamily 后会直接使用该字体绘制,并自动减弱叠墨特效,避免破坏字形。

参数

参数名类型必填默认值说明
options.textstring-要渲染的文字,支持 \n 换行
options.fontFamilystring-已加载的自定义字体 family
options.widthnumber自动画布宽度(像素)
options.heightnumber自动画布高度(像素)
options.fontSizenumber48字号
options.colorstring#1a1a2e墨迹颜色
options.backgroundColorstringtransparent背景色,默认透明
options.styleHandwritingStylebrush未传 fontFamily 时的风格预设
options.slantnumber10整体倾斜角度(度)
options.variationnumber0.55笔迹起伏强度 0–1
options.seednumber由文字哈希相同 seed + 参数每次生成一致
depsGenerateHandwritingDeps-环境依赖

工作原理

  1. 调用方通过 loadHandwritingFont 注入字体加载逻辑(浏览器 FontFace、Node registerFont 等)
  2. generateHandwriting 使用 fontFamily 指定的已加载字体;未传时回退到系统字体栈 + 叠墨特效
  3. 逐字排版,支持多行与左/中/右对齐;透明背景默认开启

内置字体(文档站)

Playground 内置 docs/public/fonts/ZhiMangXing-Regular.ttf(钟齐志莽行书),仅供文档演示。生产环境请自行准备有合法授权的字体文件。