Skip to content

toPng

Convert an image to PNG format.

Signature

typescript
function toPng(input: Buffer, options?: PngOptions): Promise<Buffer>
function toPngSync(input: Buffer, options?: PngOptions): Buffer

Parameters

ParameterTypeDescription
inputBufferImage buffer
optionsPngOptionsPNG encoding options (optional)

PngOptions

typescript
interface PngOptions {
  compression?: number;  // 0-9, default: 6
}

Returns

Buffer - PNG encoded image

Examples

Basic Conversion

typescript
import { toPng } from 'bun-image-turbo';

const png = await toPng(buffer);
await Bun.write('output.png', png);

With Compression Level

typescript
// Fast compression (larger file)
const fast = await toPng(buffer, { compression: 1 });

// Balanced (default)
const balanced = await toPng(buffer, { compression: 6 });

// Maximum compression (smaller file, slower)
const max = await toPng(buffer, { compression: 9 });

Sync Version

typescript
import { toPngSync } from 'bun-image-turbo';

const png = toPngSync(buffer, { compression: 6 });

Preserve Transparency

typescript
// PNG preserves alpha channel
const webpWithAlpha = Buffer.from(await Bun.file('logo.webp').arrayBuffer());
const png = await toPng(webpWithAlpha);
// Transparency is preserved

From JPEG

typescript
const jpeg = Buffer.from(await Bun.file('photo.jpg').arrayBuffer());
const png = await toPng(jpeg);
// Note: No quality loss, but file will be larger

Compression Levels

LevelSpeedFile Size
0FastestLargest
1-2FastLarge
3-5MediumMedium
6BalancedBalanced (default)
7-8SlowSmaller
9SlowestSmallest

When to Use PNG

Use PNG for:

  • Images with transparency
  • Screenshots
  • Graphics with text
  • Logos and icons
  • When lossless quality is required

Don't use PNG for:

  • Photos (use JPEG or WebP)
  • Large images (file sizes can be huge)
  • Web delivery (WebP is usually better)

Notes

  • PNG is always lossless
  • Supports alpha channel (transparency)
  • File sizes can be large for photos
  • Compression level affects encoding time, not quality

See Also

  • toJpeg() - For photos without transparency
  • toWebp() - For smaller files with transparency
  • transform() - For resize + convert in one operation