20 customizable shape functions for your sticker creator. Click the copy button to use any shape.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.1);
ctx.lineTo(width * 0.6, height * 0.4);
ctx.lineTo(width * 0.9, height * 0.4);
ctx.lineTo(width * 0.65, height * 0.6);
ctx.lineTo(width * 0.8, height * 0.9);
ctx.lineTo(width * 0.5, height * 0.7);
ctx.lineTo(width * 0.2, height * 0.9);
ctx.lineTo(width * 0.35, height * 0.6);
ctx.lineTo(width * 0.1, height * 0.4);
ctx.lineTo(width * 0.4, height * 0.4);
ctx.closePath();
}
A classic 5-point star shape perfect for decorations and badges.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.9);
ctx.bezierCurveTo(
width * 0.5, height * 0.7,
width * 0.9, height * 0.5,
width * 0.5, height * 0.1
);
ctx.bezierCurveTo(
width * 0.1, height * 0.5,
width * 0.5, height * 0.7,
width * 0.5, height * 0.9
);
ctx.closePath();
}
A symmetrical heart shape created with Bezier curves.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.arc(width * 0.3, height * 0.4, height * 0.2, Math.PI * 0.5, Math.PI * 1.5);
ctx.arc(width * 0.5, height * 0.3, height * 0.25, Math.PI * 1.0, Math.PI * 2.0);
ctx.arc(width * 0.7, height * 0.4, height * 0.2, Math极I * 1.5, Math.PI * 0.5);
ctx.arc(width * 0.5, height * 0.5, height * 0.2, Math.PI * 0.0, Math.PI * 1.0);
ctx.closePath();
}
A fluffy cloud shape made from multiple arc segments.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.1);
ctx.lineTo(width * 0.9, height * 0.5);
ctx.lineTo(width * 0.5, height * 0.9);
ctx.lineTo(width * 0.1, height * 0.5);
ctx.closePath();
}
A simple diamond shape, perfect for gems and jewelry.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
for (let i = 0; i < 6; i++) {
const angle = (Math.PI * 2 * i) / 6 - Math.PI / 6;
const x = width * 0.5 + width * 0.4 * Math.cos(angle);
const y = height * 0.极 + height * 0.4 * Math.sin(angle);
if (i === 0) {
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
}
ctx.closePath();
}
A regular hexagon with equal sides and angles.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
// Main bubble
ctx.moveTo(width * 0.2, height * 0.2);
ctx.lineTo(width * 0.8, height * 0.2);
ctx.lineTo(width * 0.8, height * 0.7);
ctx.lineTo(width * 0.5, height * 0.7);
ctx.lineTo(width * 0.4, height * 0.9);
ctx.lineTo(width * 0.45, height * 0.7);
ctx.lineTo(width * 0.2, height * 0.7);
ctx.closePath();
}
A classic speech bubble with a pointer for comic effects.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
// Outer circle
ctx.arc(width * 0.5, height * 0.5, height * 0.4, 0, Math.PI * 2);
// Inner circle to create the crescent
ctx.moveTo(width * 0.6, height * 0.5);
ctx.arc(width * 0.6, height * 0.5, height * 0.3, 0, Math.PI * 2, true);
}
A crescent moon shape created by combining two circles.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.1, height * 0.5);
ctx.lineTo(width * 0.7, height * 0.5);
ctx.lineTo(width * 0.7, height * 0.3);
ctx.lineTo(width * 0.9, height * 0.5);
ctx.lineTo(width * 0.7, height * 0.7);
ctx.lineTo(width * 0.7, height * 0.5);
ctx.closePath();
}
A right-pointing arrow shape for directions and pointers.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.2, height * 0.5);
ctx.bezierCurveTo(
width * 0.2, height * 0.2,
width * 0.8, height * 0.2,
width * 0.8, height * 0.5
);
ctx.bezierCurveTo(
width * 0.8, height * 0.8,
width * 0.2, height * 0.8,
width * 0.2, height * 0.5
);
ctx.bezierCurveTo(
width * 0.2, height * 0.2,
width * 0.8, height * 0.2,
width * 0.8, height * 0.5
);
}
An infinity symbol created with Bezier curves.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
const teeth = 10;
const innerRadius = height * 0.3;
const outerRadius = height * 0.4;
for (let i = 0; i < teeth * 2; i++) {
const angle = (Math.PI * 2 * i) / (teeth * 2);
const radius = i % 2 === 0 ? outerRadius : innerRadius;
const x = width * 0.5 + radius * Math.cos(angle);
const y = height * 0.5 + radius * Math.sin(angle);
if (i === 0) {
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
}
ctx.closePath();
}
A gear/cogwheel shape with teeth for mechanical designs.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
const centerX = width * 0.5;
const centerY = height * 0.5;
const maxRadius = height * 0.4;
const coils = 4;
const rotation = Math.PI * 2;
ctx.moveTo(centerX, centerY);
for (let i = 0; i <= 100; i++) {
const angle = i / 100 * rotation * coils;
const radius = maxRadius * (i / 100);
const x = centerX + Math.cos(angle) * radius;
const y = centerY + Math.sin(angle) * radius;
ctx.lineTo(x, y);
}
}
}
A spiral shape that can be used for decorative elements.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.2, height * 0.2);
ctx.lineTo(width * 0.8, height * 0.2);
// Tab
ctx.bezierCurveTo(
width * 0.85, height * 0.2,
width * 0.85, height * 0.4,
width * 0.8, height * 0.4
);
ctx.lineTo(width * 0.8, height * 0.8);
ctx.lineTo(width * 0.2, height * 0.8);
ctx.lineTo(width * 0.2, height * 0.4);
// Tab
ctx.bezierCurveTo(
width * 0.15, height * 0.4,
width * 0.15, height * 0.2,
width * 0.2, height * 0.2
);
ctx.closePath();
}
A puzzle piece shape with connection tabs.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
// Right wing
ctx.moveTo(width * 0.5, height * 0.5);
ctx.bezierCurveTo(
width * 0.7, height * 0.3,
width * 0.9, height * 0.2,
width * 0.8, height * 0.6
);
ctx.bezierCurveTo(
width * 0.9, height * 0.8,
width * 0.7, height * 0.9,
width * 0.5, height * 0.7
);
// Left wing
ctx.moveTo(width * 0.5, height * 0.5);
ctx.bezierCurveTo(
width * 0.3, height * 0.3,
width * 0.1, height * 0.2,
width * 0.2, height * 0.6
);
ctx.bezierCurveTo(
width * 0.1, height * 0.8,
width * 0.3, height * 0.9,
width * 0.5, height * 0.7
);
ctx.closePath();
}
A symmetrical butterfly shape with detailed wings.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.1);
ctx.bezierCurveTo(
width * 0.8, height * 0.2,
width * 0.9, height * 0.5,
width * 0.7, height * 0.8
);
ctx.bezierCurveTo(
width * 0.5, height * 0.9,
width * 0.3, height * 极.7,
width * 0.5, height * 0.1
);
ctx.closePath();
}
A simple leaf shape with curved edges.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.1);
ctx.lineTo(width * 0.9, height * 0.4);
ctx.lineTo(width * 0.8, height * 0.8);
ctx.lineTo(width * 0.5, height * 0.9);
ctx.lineTo(width * 0.2, height * 0.8);
ctx.lineTo(width * 0.1, height * 0.4);
ctx.closePath();
}
A classic shield shape with a curved bottom.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
const points = 16;
const innerRadius = height * 0.2;
const outerRadius = height * 0.4;
for (let i = 0; i < points * 2;极++) {
const angle = (Math.PI * 2 * i) / (points * 2);
const radius = i % 2 === 0 ? outerRadius : innerRadius;
const x = width * 0.5 + radius * Math.cos(angle);
const y = height * 0.5 + radius * Math.sin(angle);
if (i === 0) {
ctx.moveTo(x, y);
} else {
ctx.lineTo(x, y);
}
}
ctx.closePath();
}
A starburst shape with alternating points for emphasis.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.5, height * 0.1);
ctx.bezierCurveTo(
width * 0.1, height * 0.3,
width * 0.1, height * 0.7,
width * 0.5, height * 0.9
);
ctx.bezierCurveTo(
width * 0.9, height * 0.7,
width * 0.9, height * 0.3,
width * 0.5, height * 0.1
);
ctx.closePath();
}
A teardrop shape that's pointed at the top and rounded at the bottom.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
// Vertical part
ctx.moveTo(width * 0.4, height * 0.1);
ctx.lineTo(width * 0.6, height * 0.1);
ctx.lineTo(width * 0.6, height * 0.4);
ctx.lineTo(width * 0.9, height * 0.4);
ctx.lineTo(width * 0.9, height * 0.6);
ctx.lineTo(width * 0.6, height * 0.6);
ctx.lineTo(width * 0.6, height * 0.9);
ctx.lineTo(width * 0.4, height * 0.9);
ctx.lineTo(width * 0.4, height * 0.6);
ctx.lineTo(width * 0.1, height * 0.6);
ctx.lineTo(width * 0.1, height * 0.4);
ctx.lineTo(width * 0.4, height * 0.4);
ctx.closePath();
}
A plus sign/cross shape with equal arms.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
ctx.moveTo(width * 0.1, height * 0.5);
ctx.lineTo(width * 0.2, height * 0.3);
ctx.lineTo(width * 0.3, height * 0.5);
ctx.lineTo(width * 0.4, height * 0.3);
ctx.lineTo(width * 0.5, height * 0.5);
ctx.lineTo(width * 0.6, height * 0.3);
ctx.lineTo(width * 0.7, height * 0.5);
ctx.lineTo(width * 0.8, height * 0.3);
ctx.lineTo(width * 0.9, height * 0.5);
ctx.lineTo(width * 0.9, height * 0.8);
ctx.lineTo(width * 0.1, height * 0.8);
ctx.closePath();
}
A crown shape with triangular points along the top.
function drawCustomShape(ctx) {
const width = ctx.canvas.width;
const height = ctx.canvas.height;
const petals = 6;
for (let i = 0; i < petals; i++) {
const angle = (Math.PI * 2 * i) / petals;
const x = width * 0.5 + height * 0.3 * Math.cos(angle);
const y = height * 0.5 + height * 0.3 * Math.sin(angle);
ctx.moveTo(width * 0.5, height * 0.5);
ctx.arc(x, y, height * 0.2, angle, angle + Math.PI * 2 / petals);
}
ctx.closePath();
}
A flower shape with multiple petals arranged in a circle.