Color Handling
ts-potrace provides flexible color handling capabilities that allow you to customize the appearance of your vector output. This includes foreground and background color control, color inversion, and multi-color support through posterization.
Basic Color Options
Both Potrace
and Posterizer
classes accept color-related parameters:
import { Potrace } from 'ts-potrace'
const potrace = new Potrace({
// Path fill color (CSS color string or 'auto')
color: '#3498db',
// Background color (CSS color string or 'transparent')
background: '#f0f0f0',
// Whether to trace dark areas (true) or light areas (false)
blackOnWhite: true,
})
Color Format Support
ts-potrace supports various CSS color formats:
- Hex codes:
#3498db
,#f00
- RGB/RGBA:
rgb(52, 152, 219)
,rgba(52, 152, 219, 0.5)
- HSL/HSLA:
hsl(204, 70%, 53%)
,hsla(204, 70%, 53%, 0.5)
- Named colors:
steelblue
,tomato
, etc. - Special values:
auto
,transparent
Color Mode: Black on White vs White on Black
The blackOnWhite
parameter controls which parts of the image are traced:
import { Potrace } from 'ts-potrace'
// Trace dark areas (default)
const normalTrace = new Potrace({
blackOnWhite: true, // Default - traces dark areas of the image
})
// Trace light areas (inverted)
const invertedTrace = new Potrace({
blackOnWhite: false, // Traces light areas of the image
})
Auto Color Detection
When the color
parameter is set to 'auto'
, ts-potrace will attempt to choose an appropriate color based on the image content:
import { Potrace } from 'ts-potrace'
const potrace = new Potrace({
color: 'auto', // Will be determined from the image
})
Transparent Backgrounds
You can create SVGs with transparent backgrounds:
import { Potrace } from 'ts-potrace'
const potrace = new Potrace({
background: 'transparent', // Default value
})
Advanced Color Handling with Posterization
For more sophisticated color handling, the Posterizer
class offers advanced options:
import { Posterizer } from 'ts-potrace'
const posterizer = new Posterizer({
// Create 5 color levels
steps: 5,
// Choose color fill strategy
fillStrategy: 'dominant', // 'spread', 'dominant', 'median', 'mean'
// Base foreground/background settings
color: 'auto',
background: 'white',
})
Customizing Color Intensity in Posterization
The color intensity in posterized output is determined by several factors:
- The number of steps
- The fill strategy
- The image's luminance distribution
You can control how aggressively colors are differentiated:
import { Posterizer } from 'ts-potrace'
// For subtle color variations
const subtlePosterizer = new Posterizer({
steps: 3,
fillStrategy: 'mean',
})
// For more pronounced color separation
const boldPosterizer = new Posterizer({
steps: 8,
fillStrategy: 'dominant',
})
Working with Color-Critical Images
For applications where color accuracy is important:
import fs from 'node:fs'
import { Posterizer } from 'ts-potrace'
// Settings for better color reproduction
const posterizer = new Posterizer({
steps: 10, // More steps for better color gradation
fillStrategy: 'dominant', // Use most frequent colors
rangeDistribution: 'auto', // Optimize ranges based on image content
})
posterizer.loadImage('color-critical.jpg', (err) => {
if (err)
throw err
const svg = posterizer.getSVG()
fs.writeFileSync('color-accurate.svg', svg)
})