npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@uttori/image-png

v1.3.0

Published

A PNG Decoder and meta data reading utility.

Downloads

61

Readme

view on npm npm module downloads Build Status Dependency Status Coverage Status Tree-Shaking Support Dependency Count Minified + GZip Minified

Uttori ImagePNG

A PNG Decoder and meta data reading utility.

Install

npm install --save @uttori/image-png

Config

{
}

Example

const image_data = await FileUtility.readFile('./test/assets/PngSuite', 'oi1n0g16', 'png', null);
const image = ImagePNG.fromFile(image_data);
image.decodePixels();
const length = image.pixels.length;
➜ 6144
const pixel = image.getPixel(0, 0);
➜ [255, 255, 255, 255]

API Reference

Classes

Functions

ImagePNG ⇐ DataBuffer

PNG Decoder

Kind: global class
Extends: DataBuffer
See

Properties

| Name | Type | Description | | --- | --- | --- | | width | number | Pixel Width | | height | number | Pixel Height | | bitDepth | number | Image Bit Depth, one of: 1, 2, 4, 8, 16 | | colorType | number | = Defines pixel structure, one of: 0, 2, 3, 4, 6 | | compressionMethod | number | Type of compression, always 0 | | filterMethod | number | Type of filtering, always 0 | | interlaceMethod | number | Type of interlacing, one of: 0, 1 | | colors | number | Number of bytes for each pixel | | alpha | boolean | True when the image has an alpha transparency layer | | palette | Array.<number> | Uint8Array | Raw Color data | | pixels | Uint8Array | Raw Image Pixel data | | transparency | Uint8Array | Raw Transparency data | | physical | object | Object containing physical dimension information | | physical.width | number | Physical Dimension Width | | physical.height | number | Physical Dimension Height | | physical.unit | number | Physical Dimension Units, with 0 being unknown and 1 being Meters | | dataChunks | Array.<Uint8Array> | Image Data pieces | | header | Uint8Array | PNG Signature from the data |

new ImagePNG(input)

Creates a new ImagePNG.

| Param | Type | Description | | --- | --- | --- | | input | Array | ArrayBuffer | Buffer | DataBuffer | Int8Array | Int16Array | Int32Array | number | string | Uint8Array | Uint16Array | Uint32Array | The data to process. |

Example (new ImagePNG(list, options))

const image_data = await FileUtility.readFile('./test/assets/PngSuite', 'oi1n0g16', 'png', null);
const image = ImagePNG.fromFile(image_data);
image.decodePixels();
const length = image.pixels.length;
 ➜ 6144
const pixel = image.getPixel(0, 0);
 ➜ [255, 255, 255, 255]

imagePNG.width : number

Pixel Width

Kind: instance property of ImagePNG

imagePNG.height : number

Pixel Height

Kind: instance property of ImagePNG

imagePNG.bitDepth : number

Image Bit Depth, one of: 1, 2, 4, 8, 16

Kind: instance property of ImagePNG

imagePNG.colorType : number

Defines pixel structure, one of: 0, 2, 3, 4, 6

Kind: instance property of ImagePNG

imagePNG.compressionMethod : number

Type of compression, always 0

Kind: instance property of ImagePNG

imagePNG.filterMethod : number

Type of filtering, always 0

Kind: instance property of ImagePNG

imagePNG.interlaceMethod : number

Type of interlacing, one of: 0, 1

Kind: instance property of ImagePNG

imagePNG.colors : number

Number of bytes for each pixel

Kind: instance property of ImagePNG

imagePNG.alpha : boolean

True when the image has an alpha transparency layer

Kind: instance property of ImagePNG

imagePNG.palette : Array.<number> | Uint8Array

Raw Color data

Kind: instance property of ImagePNG

imagePNG.pixels : Uint8Array

Raw Image Pixel data

Kind: instance property of ImagePNG

imagePNG.transparency : Uint8Array

Raw Transparency data

Kind: instance property of ImagePNG

imagePNG.physical : object

physical - Object containing physical dimension information

Kind: instance property of ImagePNG

physical.width : number

Physical Dimension Width

Kind: static property of physical

physical.height : number

Physical Dimension Height

Kind: static property of physical

physical.unit : number

Physical Dimension Units, with 0 being unknown and 1 being Meters

Kind: static property of physical

imagePNG.dataChunks : Array.<Uint8Array>

Image Data pieces

Kind: instance property of ImagePNG

imagePNG.header : Array | Uint8Array

PNG Signature from the data

Kind: instance property of ImagePNG

imagePNG.setBitDepth(bitDepth)

Sets the bitDepth on the ImagePNG instance.

Kind: instance method of ImagePNG

| Param | Type | Description | | --- | --- | --- | | bitDepth | number | The bitDepth to set, one of: 1, 2, 4, 8, 16 |

imagePNG.setColorType(colorType)

Sets the colorType on the ImagePNG instance. Both color and alpha properties are inferred from the colorType.

| Color Type | Allowed Bit Depths | Interpretation | |------------|--------------------|----------------| | 0 | 1, 2, 4, 8, 16 | Each pixel is a grayscale sample. | 2 | 8, 16 | Each pixel is an R, G, B triple. | 3 | 1, 2, 4, 8 | Each pixel is a palette index; a PLTE chunk must appear. | 4 | 8, 16 | Each pixel is a grayscale sample, followed by an alpha sample. | 6 | 8, 16 | Each pixel is an R, G, B triple, followed by an alpha sample.

Kind: instance method of ImagePNG
Throws:

  • Error Invalid Color Type, anything other than 0, 2, 3, 4, 6

| Param | Type | Description | | --- | --- | --- | | colorType | number | The colorType to set, one of: 0, 2, 3, 4, 6 |

imagePNG.setCompressionMethod(compressionMethod)

Sets the compressionMethod on the ImagePNG instance. The compressionMethod should always be 0.

Kind: instance method of ImagePNG
Throws:

  • Error Unsupported Compression Method, anything other than 0

| Param | Type | Description | | --- | --- | --- | | compressionMethod | number | The compressionMethod to set, always 0 |

imagePNG.setFilterMethod(filterMethod)

Sets the filterMethod on the ImagePNG instance. The filterMethod should always be 0.

Kind: instance method of ImagePNG
Throws:

  • Error Unsupported Filter Method, anything other than 0

| Param | Type | Description | | --- | --- | --- | | filterMethod | number | The filterMethod to set, always 0 |

imagePNG.setInterlaceMethod(interlaceMethod)

Sets the interlaceMethod on the ImagePNG instance. The interlaceMethod should always be 0 or 1.

Kind: instance method of ImagePNG
Throws:

  • Error Unsupported Interlace Method, anything other than 0 or 1

| Param | Type | Description | | --- | --- | --- | | interlaceMethod | number | The filterMethod to set, always 0 or 1 |

imagePNG.setPalette(palette)

Sets the palette on the ImagePNG instance.

Kind: instance method of ImagePNG
Throws:

  • Error No colors in the palette
  • Error Too many colors for the current bit depth

| Param | Type | Description | | --- | --- | --- | | palette | Array.<number> | Uint8Array | The palette to set |

imagePNG.getPixel(x, y) ⇒ Array

Get the pixel color at a specified x, y location.

Kind: instance method of ImagePNG
Returns: Array - the color as [red, green, blue, alpha]
Throws:

  • Error x is out of bound for the image
  • Error y is out of bound for the image
  • Error Unknown color types

| Param | Type | Description | | --- | --- | --- | | x | number | The hoizontal offset to read. | | y | number | The vertical offset to read. |

imagePNG.parse()

Parse the PNG file, decoding the supported chunks.

Kind: instance method of ImagePNG

imagePNG.decodeHeader()

Decodes and validates PNG Header. Signature (Decimal): [137, 80, 78, 71, 13, 10, 26, 10] Signature (Hexadecimal): [89, 50, 4E, 47, 0D, 0A, 1A, 0A] Signature (ASCII): [\211, P, N, G, \r, \n, \032, \n]

Kind: instance method of ImagePNG
Throws:

  • Error Missing or invalid PNG header

See: PNG Signature

imagePNG.decodeChunk() ⇒ string

Decodes the chunk type, and attempts to parse that chunk if supported. Supported Chunk Types: IHDR, PLTE, IDAT, IEND, tRNS, pHYs

Chunk Structure: Length: 4 bytes Type: 4 bytes (IHDR, PLTE, IDAT, IEND, etc.) Chunk: {length} bytes CRC: 4 bytes

Kind: instance method of ImagePNG
Returns: string - Chunk Type
Throws:

  • Error Invalid Chunk Length when less than 0

See: Chunk Layout

imagePNG.decodeIHDR(chunk)

Decode the IHDR (Image header) chunk. Should be the first chunk in the data stream.

Width: 4 bytes Height: 4 bytes Bit Depth: 1 byte Colour Type: 1 byte Compression Method: 1 byte Filter Method: 1 byte Interlace Method: 1 byte

Kind: instance method of ImagePNG
See

| Param | Type | Description | | --- | --- | --- | | chunk | Uint8Array | Data Blob |

imagePNG.decodePLTE(chunk)

Decode the PLTE (Palette) chunk. The PLTE chunk contains from 1 to 256 palette entries, each a three-byte series of the form. The number of entries is determined from the chunk length. A chunk length not divisible by 3 is an error.

Kind: instance method of ImagePNG
See: Palette

| Param | Type | Description | | --- | --- | --- | | chunk | Uint8Array | Data Blob |

imagePNG.decodeIDAT(chunk)

Decode the IDAT (Image Data) chunk. The IDAT chunk contains the actual image data which is the output stream of the compression algorithm.

Kind: instance method of ImagePNG
See: Image Data

| Param | Type | Description | | --- | --- | --- | | chunk | Uint8Array | Data Blob |

imagePNG.decodeTRNS(chunk)

Decode the tRNS (Transparency) chunk. The tRNS chunk specifies that the image uses simple transparency: either alpha values associated with palette entries (for indexed-color images) or a single transparent color (for grayscale and truecolor images). Although simple transparency is not as elegant as the full alpha channel, it requires less storage space and is sufficient for many common cases.

Kind: instance method of ImagePNG
See: Transparency

| Param | Type | Description | | --- | --- | --- | | chunk | Uint8Array | Data Blob |

imagePNG.decodePHYS(chunk)

Decode the pHYs (Pixel Dimensions) chunk. The pHYs chunk specifies the intended pixel size or aspect ratio for display of the image. When the unit specifier is 0, the pHYs chunk defines pixel aspect ratio only; the actual size of the pixels remains unspecified. If the pHYs chunk is not present, pixels are assumed to be square, and the physical size of each pixel is unspecified.

Structure: Pixels per unit, X axis: 4 bytes (unsigned integer) Pixels per unit, Y axis: 4 bytes (unsigned integer) Unit specifier: 1 byte 0: unit is unknown 1: unit is the meter

Kind: instance method of ImagePNG
See: Pixel Dimensions

| Param | Type | Description | | --- | --- | --- | | chunk | Uint8Array | Data Blob |

imagePNG.decodeIEND(_chunk)

Decode the IEND (Image trailer) chunk. The IEND chunk marks the end of the PNG DataBuffer. The chunk's data field is empty.

Kind: instance method of ImagePNG
See: Image Trailer

| Param | Type | Description | | --- | --- | --- | | _chunk | Uint8Array | Unused. |

imagePNG.decodePixels()

Uncompress IDAT chunks.

Kind: instance method of ImagePNG
Throws:

  • Error No IDAT chunks to decode
  • Error Deinterlacing Error
  • Error Inflating Error
  • Error Adam7 interlaced format is unsupported

imagePNG.interlaceNone(data)

Deinterlace with no interlacing.

Kind: instance method of ImagePNG
See: PNG Filters

| Param | Type | Description | | --- | --- | --- | | data | Buffer | Data to deinterlace. |

imagePNG.unFilterNone(scanline, bpp, offset, length)

No filtering, direct copy.

Kind: instance method of ImagePNG

| Param | Type | Description | | --- | --- | --- | | scanline | Array | Uint8Array | Scanline to search for pixels in. | | bpp | number | Bytes Per Pixel | | offset | number | Offset | | length | number | Length |

imagePNG.unFilterSub(scanline, bpp, offset, length)

The Sub() filter transmits the difference between each byte and the value of the corresponding byte of the prior pixel. Sub(x) = Raw(x) + Raw(x - bpp)

Kind: instance method of ImagePNG

| Param | Type | Description | | --- | --- | --- | | scanline | Array | Uint8Array | Scanline to search for pixels in. | | bpp | number | Bytes Per Pixel | | offset | number | Offset | | length | number | Length |

ImagePNG.fromFile(data) ⇒ ImagePNG

Creates a new ImagePNG from file data.

Kind: static method of ImagePNG
Returns: ImagePNG - the new ImagePNG instance for the provided file data

| Param | Type | Description | | --- | --- | --- | | data | Array | ArrayBuffer | Buffer | DataBuffer | Int8Array | Int16Array | Int32Array | number | string | Uint8Array | Uint16Array | Uint32Array | The data of the image to process. |

ImagePNG.fromBuffer(buffer) ⇒ ImagePNG

Creates a new ImagePNG from a DataBuffer.

Kind: static method of ImagePNG
Returns: ImagePNG - the new ImagePNG instance for the provided DataBuffer

| Param | Type | Description | | --- | --- | --- | | buffer | DataBuffer | The DataBuffer of the image to process. |

debug() : function

Kind: global function


Tests

To run the test suite, first install the dependencies, then run npm test:

npm install
npm test
DEBUG=Uttori* npm test

Contributors

License