Represents a raw buffer of binary data, which is used to store data for the different typed arrays. ArrayBuffers cannot be read from or written to directly, but can be passed to a typed array or DataView Object to interpret the raw buffer as needed.
constructor
Image.constructor
Referenced types
class ArrayBuffer
class Blob
A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system.
Returns a promise that resolves to the contents of the blob as an ArrayBuffer
Returns a promise that resolves to the contents of the blob as a Uint8Array (array of bytes) its the same as
new Uint8Array(await blob.arrayBuffer())Read the data from the blob as a FormData object.
This first decodes the data from UTF-8, then parses it as a
multipart/form-databody or aapplication/x-www-form-urlencodedbody.The
typeproperty of the blob is used to determine the format of the body.This is a non-standard addition to the
BlobAPI, to make it conform more closely to theBodyMixinAPI.Wrap this blob in a Bun.Image pipeline. Equivalent to
new Bun.Image(this, options)— the constructor is synchronous (the underlying read happens lazily when an Image terminal is awaited), so this works onBun.file(),Bun.s3(), fd-backed and in-memory blobs alike:await Bun.file("photo.jpg").image().resize(400).webp().write("thumb.webp");Read the data from the blob as a JSON object.
This first decodes the data from UTF-8, then parses it as JSON.
Returns a readable stream of the blob's contents
Returns a promise that resolves to the contents of the blob as a string
interface ConstructorOptions
- maxPixels?: number
Reject inputs whose
width × heightexceeds this many pixels. The check runs after the header is read but before any pixel buffer is allocated, so a tiny file claiming a huge canvas is refused cheaply.
namespace Image
interface ConstructorOptions
- maxPixels?: number
Reject inputs whose
width × heightexceeds this many pixels. The check runs after the header is read but before any pixel buffer is allocated, so a tiny file claiming a huge canvas is refused cheaply.
interface ModulateOptions
interface ResizeOptions
- fit?: 'fill' | 'inside'
"fill"stretches to exactly width×height."inside"preserves aspect ratio so the result fits within width×height.
- type ErrorCode = 'ERR_IMAGE_FORMAT_UNSUPPORTED' | 'ERR_IMAGE_TOO_MANY_PIXELS' | 'ERR_IMAGE_DECODE_FAILED' | 'ERR_IMAGE_ENCODE_FAILED' | 'ERR_IMAGE_UNKNOWN_FORMAT' | 'ERR_INVALID_STATE'
Stable
error.codevalues set on rejections fromBun.Imageterminals. Branch on these instead of parsing the message.ERR_IMAGE_FORMAT_UNSUPPORTED— the requested format isn't available on this machine (HEIC/AVIF without the OS codec, TIFF on Linux). Catch this to fall back to a portable format.ERR_IMAGE_TOO_MANY_PIXELS— header dimensions or resize output exceedmaxPixels, or a path-backed input is over the 256 MiB cap.ERR_IMAGE_DECODE_FAILED/ERR_IMAGE_ENCODE_FAILED— codec error.ERR_IMAGE_UNKNOWN_FORMAT— input bytes didn't match any sniffer.ERR_INVALID_STATE— the input ArrayBuffer was transferred between construction and the terminal call.- File-backed inputs surface the underlying syscall code (
ENOENT,EACCES, …) directly.
- type Filter = 'nearest' | 'box' | 'bilinear' | 'linear' | 'cubic' | 'mitchell' | 'lanczos2' | 'lanczos3' | 'mks2013' | 'mks2021'
- type Format = 'jpeg' | 'png' | 'webp' | 'heic' | 'avif' | 'bmp' | 'tiff' | 'gif'
bmp/tiff/gifare decode-only —metadata().formatmay report them but there are no.bmp()/.tiff()/.gif()encoder methods.tiffdecode rejects witherror.code === "ERR_IMAGE_FORMAT_UNSUPPORTED"on Linux;gifdecodes the first frame everywhere.