image
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese@json-render/image
@json-render/image
Image renderer that converts JSON specs into SVG and PNG images using Satori.
使用Satori将JSON规范转换为SVG和PNG图像的图像渲染器。
Quick Start
快速开始
typescript
import { renderToPng } from "@json-render/image/render";
import type { Spec } from "@json-render/core";
const spec: Spec = {
root: "frame",
elements: {
frame: {
type: "Frame",
props: { width: 1200, height: 630, backgroundColor: "#1a1a2e" },
children: ["heading"],
},
heading: {
type: "Heading",
props: { text: "Hello World", level: "h1", color: "#ffffff" },
children: [],
},
},
};
const png = await renderToPng(spec, {
fonts: [{ name: "Inter", data: fontData, weight: 400, style: "normal" }],
});typescript
import { renderToPng } from "@json-render/image/render";
import type { Spec } from "@json-render/core";
const spec: Spec = {
root: "frame",
elements: {
frame: {
type: "Frame",
props: { width: 1200, height: 630, backgroundColor: "#1a1a2e" },
children: ["heading"],
},
heading: {
type: "Heading",
props: { text: "Hello World", level: "h1", color: "#ffffff" },
children: [],
},
},
};
const png = await renderToPng(spec, {
fonts: [{ name: "Inter", data: fontData, weight: 400, style: "normal" }],
});Using Standard Components
使用标准组件
typescript
import { defineCatalog } from "@json-render/core";
import { schema, standardComponentDefinitions } from "@json-render/image";
export const imageCatalog = defineCatalog(schema, {
components: standardComponentDefinitions,
});typescript
import { defineCatalog } from "@json-render/core";
import { schema, standardComponentDefinitions } from "@json-render/image";
export const imageCatalog = defineCatalog(schema, {
components: standardComponentDefinitions,
});Adding Custom Components
添加自定义组件
typescript
import { z } from "zod";
const catalog = defineCatalog(schema, {
components: {
...standardComponentDefinitions,
Badge: {
props: z.object({ label: z.string(), color: z.string().nullable() }),
slots: [],
description: "A colored badge label",
},
},
});typescript
import { z } from "zod";
const catalog = defineCatalog(schema, {
components: {
...standardComponentDefinitions,
Badge: {
props: z.object({ label: z.string(), color: z.string().nullable() }),
slots: [],
description: "A colored badge label",
},
},
});Standard Components
标准组件
| Component | Category | Description |
|---|---|---|
| Root | Root container. Defines width, height, background. Must be root. |
| Layout | Container with padding, margin, border, absolute positioning |
| Layout | Horizontal flex layout |
| Layout | Vertical flex layout |
| Content | h1-h4 heading text |
| Content | Body text with full styling |
| Content | Image from URL |
| Decorative | Horizontal line separator |
| Decorative | Empty vertical space |
| 组件 | 分类 | 描述 |
|---|---|---|
| 根容器 | 根容器,定义宽度、高度、背景,必须作为根元素 |
| 布局 | 支持内边距、外边距、边框、绝对定位的容器 |
| 布局 | 水平弹性布局 |
| 布局 | 垂直弹性布局 |
| 内容 | h1-h4级标题文本 |
| 内容 | 支持完整样式的正文文本 |
| 内容 | 来自URL的图像 |
| 装饰元素 | 水平分割线 |
| 装饰元素 | 空白垂直占位空间 |
Key Exports
核心导出
| Export | Purpose |
|---|---|
| Render spec to SVG string |
| Render spec to PNG buffer (requires |
| Image element schema |
| Pre-built component registry |
| Catalog definitions for AI prompts |
| 导出项 | 用途 |
|---|---|
| 将规范渲染为SVG字符串 |
| 将规范渲染为PNG缓冲区(依赖 |
| 图像元素Schema |
| 预构建的组件注册中心 |
| 适用于AI提示词的目录定义 |
Sub-path Exports
子路径导出
| Export | Description |
|---|---|
| Full package: schema, components, render functions |
| Schema and catalog definitions only (no React/Satori) |
| Standard component definitions and types |
| Render functions only |
| 导出路径 | 描述 |
|---|---|
| 完整包:包含schema、组件、渲染函数 |
| 仅包含schema和目录定义(无React/Satori依赖) |
| 标准组件定义和类型 |
| 仅包含渲染函数 |