cherry-box is a Node.js package filled with utilities, which are useful for working with node-canvas.
const cb = require("cherry-box")
const Canvas = require("canvas")
const fs = require("fs");
let canvas = Canvas.createCanvas(1000, 200);
let ctx = canvas.getContext('2d');
let text = [
{
text: "I like cookies!",
color: "#ffffff",
font: "monospace",
modifier: "bold",
}
]
cb.textBox(ctx, 0, 0, 1000, 200, text, 200, [1, 1]);
// Save canvas to file
let out = fs.createWriteStream("./out.png");
let stream = canvas.createPNGStream();
stream.pipe(out);
Using modules:
import { textBox } from "cherry-box";
import { createCanvas } from "canvas";
import fs from "fs";
let canvas = Canvas.createCanvas(1000, 200);
let ctx = canvas.getContext('2d');
let text = [
{
text: "I like cookies!",
color: "#ffffff",
font: "monospace",
modifier: "bold",
}
]
textBox(ctx, 0, 0, 1000, 200, text, 200, [1, 1]);
// Save canvas to file
let out = fs.createWriteStream("./out.png");
let stream = canvas.createPNGStream();
stream.pipe(out);
When using TextObject you also need to import TextObject
import { TextObject } from "cherry-box";
...
let text: Array<TextObject> = [
{
text: "I like cookies!",
color: "#ffffff",
font: "monospace",
modifier: "bold",
}
]
...
- textBox - Align the text
- wrapText - Wrap the text
- TextObject - Specify color, shadow, font for a part of the text.
TextObject is made of multiple objects. These objects accepts the following values:
name | description | example | type | required |
---|---|---|---|---|
text | Text to be displayed | Hello world |
string | true |
font | Font of the text | Arial |
string | true |
color | Color of the text | #FFFFFF |
string | true |
modifier | Modifier of the text | bold |
string | false |
shadow | Shadow of the text | object | false |
Shadow is a JSON object with the following values:
x
andy
offsets are relative to the text size. For example usex: 10, y: 10
name | description | example | type | required |
---|---|---|---|---|
color | Color of the shadow | #FFFFFF |
string | true |
blur | Blur of the shadow | 5 |
number | true |
offset | X and Y offset of the shadow | [10, 5] |
array | true |
Example text schema:
[
{
text: "I like cookies!",
color: "#ff8800",
shadow: {
offset: [10, 10], blur: 5, color: "red"
},
font: "Arial",
modifier: "bold"
}
]
textBox is an easy way to align your text, decrease font size to fit in an area and more.
name | description | example | type | required |
---|---|---|---|---|
ctx | Canvas context | CanvasRenderingContext2D | true | |
x | X coordinate of the text box | 0 |
number | true |
y | Y coordinate of the text box | 0 |
number | true |
width | Width of the text box | 100 |
number | true |
height | Height of the text box | 100 |
number | true |
text | Text to be displayed in the text box | TextObject | true | |
fontSize | Maximum font size of the text | 100 |
number | true |
align | Align of the text | [1,1] |
array | true |
- Horizontal: left
0
, center1
, right2
- Vertical: top
0
, middle1
, bottom2
Example: [1,1]
Example use of textBox in your code:
textBox(ctx, 0, 0, canvas.width, canvas.height-20, upperText, 80, [2,1]);
wrapText is a function similar to textBox, but it doesn't just align the text. It also wraps the text to fit in the specified width.
name | description | example | type | required |
---|---|---|---|---|
ctx | Canvas context | CanvasRenderingContext2D | true | |
x | X coordinate of the text box | 0 |
number | true |
y | Y coordinate of the text box | 0 |
number | true |
width | Width of the text box | 100 |
number | true |
text | Text to be displayed in the text box | TextObject | true | |
fontSize | Maximum font size of the text | 100 |
number | true |
align | Align of the text | 3 |
number | true |
- left
0
- center
1
- right
2
- justify
3
Example use of wrapText
in your code:
wrapText(ctx, 0, 0, canvas.width, text, 20, 3);