@eryx/image Module

Image loading, encoding, pixel access, and small in-memory image operations.

Summary

Classes

width: number
height: number
format: PixelFormat
channels: number
stride: number
bounds: Rect
colorSpace: "srgb" | "linear"
metadata: ImageMetadata
buffer: buffer
pixelBuffer: buffer
closed: boolean
Image:close() → ()
Image:save(path: PathLike, options: EncodeOptions?) → ()
Image:encode(format: ImageFormat, options: EncodeOptions?) → buffer
Image:crop(x: number, y: number, width: number, height: number) → Image
Image:subimage(x: number, y: number, width: number, height: number) → ImageView
Image:getPixel(x: number, y: number) → Color
Image:setPixel(x: number, y: number, color: Color) → ()
Image:resize(width: number, height: number, options: ResizeOptions?) → Image
Image:thumbnail(maxWidth: number, maxHeight: number, options: ResizeOptions?) → Image
Image:blit(src: Image, x: number, y: number, options: BlitOptions?) → ()
Image:draw(src: Image, srcRect: Rect, dstRect: Rect, options: DrawOptions?) → ()
Image:clear(color: Color) → ()
Image:fillRect(x: number, y: number, width: number, height: number, color: Color) → ()
Image:strokeRect(x: number, y: number, width: number, height: number, color: Color, thickness: number?) → ()
Image:line(x1: number, y1: number, x2: number, y2: number, color: Color, options: LineOptions?) → ()
Image:brightness(amount: number) → Image
Image:contrast(amount: number) → Image
Image:opacity(amount: number) → Image
Image:threshold(value: number) → Image
Image:colorMatrix(matrix: { number }) → Image

Functions

image.open(path: PathLike, options: DecodeOptions?) → Image
image.decode(data: buffer, options: DecodeOptions?) → Image
image.new(width: number, height: number, options: NewImageOptions | PixelFormat) → Image
image.fromBuffer(data: buffer, width: number, height: number, options: BufferImageOptions) → Image
image.fromRGBABuffer(pixelData: buffer, width: number, height: number, channels: number) → Image
image.rgb(r: number, g: number, b: number) → Color
image.rgba(r: number, g: number, b: number, a: number) → Color
image.gray(v: number, a: number?) → Color
image.rect(x: number, y: number, width: number, height: number) → Rect

API Reference

Classes

Image

Properties

width: number
height: number
format: PixelFormat
channels: number
stride: number
bounds: Rect
colorSpace: "srgb" | "linear"
metadata: ImageMetadata
buffer: buffer
pixelBuffer: buffer
closed: boolean

Image:close

Image:close() → ()

Image:save

Image:save(path: PathLike, options: EncodeOptions?) → ()

Image:encode

Image:encode(format: ImageFormat, options: EncodeOptions?) → buffer

Image:clone

Image:clone() → Image

Image:crop

Image:crop(x: number, y: number, width: number, height: number) → Image
Image:crop(rect: Rect) → Image

Image:subimage

Image:subimage(x: number, y: number, width: number, height: number) → ImageView
Image:subimage(rect: Rect) → ImageView

Image:getPixel

Image:getPixel(x: number, y: number) → Color

Image:setPixel

Image:setPixel(x: number, y: number, color: Color) → ()

Image:convert

Image:convert(format: PixelFormat, options: ConvertOptions?) → Image

Image:resize

Image:resize(width: number, height: number, options: ResizeOptions?) → Image

Image:thumbnail

Image:thumbnail(maxWidth: number, maxHeight: number, options: ResizeOptions?) → Image

Image:flipX

Image:flipX() → Image

Image:flipY

Image:flipY() → Image

Image:rotate90

Image:rotate90() → Image

Image:rotate180

Image:rotate180() → Image

Image:rotate270

Image:rotate270() → Image

Image:blit

Image:blit(src: Image, x: number, y: number, options: BlitOptions?) → ()
Image:blit(src: Image, srcRect: Rect, dstX: number, dstY: number, options: BlitOptions?) → ()

Image:draw

Image:draw(src: Image, srcRect: Rect, dstRect: Rect, options: DrawOptions?) → ()

Image:clear

Image:clear(color: Color) → ()

Image:fillRect

Image:fillRect(x: number, y: number, width: number, height: number, color: Color) → ()
Image:fillRect(rect: Rect, color: Color) → ()

Image:strokeRect

Image:strokeRect(x: number, y: number, width: number, height: number, color: Color, thickness: number?) → ()
Image:strokeRect(rect: Rect, color: Color, thickness: number?) → ()

Image:line

Image:line(x1: number, y1: number, x2: number, y2: number, color: Color, options: LineOptions?) → ()

Image:invert

Image:invert() → Image

Image:grayscale

Image:grayscale() → Image

Image:brightness

Image:brightness(amount: number) → Image

Image:contrast

Image:contrast(amount: number) → Image

Image:opacity

Image:opacity(amount: number) → Image

Image:threshold

Image:threshold(value: number) → Image

Image:colorMatrix

Image:colorMatrix(matrix: { number }) → Image

Functions

image.open

image.open(path: PathLike, options: DecodeOptions?) → Image

image.decode

image.decode(data: buffer, options: DecodeOptions?) → Image

image.new

image.new(width: number, height: number, options: NewImageOptions | PixelFormat) → Image

image.fromBuffer

image.fromBuffer(data: buffer, width: number, height: number, options: BufferImageOptions) → Image

image.fromRGBABuffer

image.fromRGBABuffer(pixelData: buffer, width: number, height: number, channels: number) → Image

image.rgb

image.rgb(r: number, g: number, b: number) → Color

image.rgba

image.rgba(r: number, g: number, b: number, a: number) → Color

image.gray

image.gray(v: number, a: number?) → Color

image.rect

image.rect(x: number, y: number, width: number, height: number) → Rect

Types

PixelFormat

type PixelFormat = "rgba8" | "rgb8" | "gray8" | "grayAlpha8"

Color

type Color = { r: number, g: number, b: number, a: number }
r: number
g: number
b: number
a: number

Rect

type Rect = { x: number, y: number, width: number, height: number }
x: number
y: number
width: number
height: number

DecodeOptions

type DecodeOptions = { format: PixelFormat?, applyOrientation: boolean? }
format: PixelFormat?
applyOrientation: boolean?

NewImageOptions

type NewImageOptions = { format: PixelFormat?, color: Color? }
format: PixelFormat?
color: Color?

BufferImageOptions

type BufferImageOptions = { format: PixelFormat, stride: number?, copy: boolean? }
format: PixelFormat
stride: number?
copy: boolean?

ImageFormat

type ImageFormat = "png" | "jpeg" | "webp"

EncodeOptions

type EncodeOptions = { format: ImageFormat?, quality: number?, lossless: boolean?, progressive: boolean? }
format: ImageFormat?
quality: number?
lossless: boolean?
progressive: boolean?

ConvertOptions

type ConvertOptions = { background: Color? }
background: Color?

ResizeFilter

type ResizeFilter = "nearest"

ResizeOptions

type ResizeOptions = { filter: ResizeFilter?, fit: "stretch" | "contain" | "cover"?, position: "center" | "topLeft" | "top" | "bottom" | "left" | "right" | "bottomRight"?, background: Color? }
filter: ResizeFilter?
fit: "stretch" | "contain" | "cover"?
position: "center" | "topLeft" | "top" | "bottom" | "left" | "right" | "bottomRight"?
background: Color?

BlendMode

type BlendMode = "replace" | "normal" | "add" | "multiply" | "screen"

BlitOptions

type BlitOptions = { blend: BlendMode?, opacity: number?, tint: Color?, mask: Image? }
blend: BlendMode?
opacity: number?
tint: Color?
mask: Image?

DrawOptions

Implements: BlitOptions

LineOptions

type LineOptions = { thickness: number? }
thickness: number?

ExifTagValue

type ExifTagValue = number | string | buffer | { number }

ImageMetadata

type ImageMetadata = { format: string?, width: number?, height: number?, originalChannels: number?, source: string?, exif: { orientation: number?, make: string?, model: string?, software: string?, dateTime: string?, artist: string?, copyright: string?, tags: { ExifTagValue }? } }
format: string?
width: number?
height: number?
originalChannels: number?
source: string?
exif: { orientation: number?, make: string?, model: string?, software: string?, dateTime: string?, artist: string?, copyright: string?, tags: { ExifTagValue }? }

ImageView

Implements: Image