# jay-peg

> Performant JPEG decoder

Latest version **1.1.1** (published 2024-11-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install jay-peg
pnpm add jay-peg
yarn add jay-peg
bun add jay-peg
```

## Health

**Score 30/100 (F)** — status: maintenance-mode.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2024-11-30 |
| First published | 2024-02-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 64.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | diegomura |
| Keywords | binary, jpeg, decode |

## Links

- npm: https://www.npmjs.com/package/jay-peg
- npm.io page: https://npm.io/package/jay-peg

## Dependencies (1)

- [restructure](https://npm.io/package/restructure.md) ^3.0.0

## Alternatives

- [flatbuffers](https://npm.io/package/flatbuffers.md) — 6.0M weekly downloads
- [jwt-simple](https://npm.io/package/jwt-simple.md) — 259.5K weekly downloads
- [@exodus/patch-broken-hermes-typed-arrays](https://npm.io/package/@exodus/patch-broken-hermes-typed-arrays.md) — 28.5K weekly downloads
- [@native-to-anchor/buffer-layout](https://npm.io/package/@native-to-anchor/buffer-layout.md) — 12.2K weekly downloads
- [binary-parser-encoder](https://npm.io/package/binary-parser-encoder.md) — 5.3K weekly downloads

## Recent versions

- 1.1.1 (latest) — 2024-11-30
- 1.1.0 — 2024-09-23
- 1.0.2 — 2024-03-25
- 1.0.1 — 2024-02-03
- 1.0.0 — 2024-02-03
- 0.0.1 — 2024-02-03

## README

# jay-peg

<a href="https://www.npmjs.com/package/jay-peg">
  <img src="https://img.shields.io/npm/v/jay-peg.svg" />
</a>
<a href="https://github.com/diegomura/jay-peg/blob/master/LICENSE">
  <img src="https://img.shields.io/github/license/diegomura/jay-peg.svg" />
</a>
<a href="https://github.com/prettier/prettier">
  <img src="https://img.shields.io/badge/styled_with-prettier-ff69b4.svg" />
</a>

## Overview

A blazing-fast and compact JavaScript library dedicated to efficiently decoding JPEG images.

## Installation

Using npm:

```bash
npm install jay-peg
```

Using yarn:

```bash
yarn add jay-peg
```

## Usage

Use the `decoder` providing a JPEG data buffer as input.

```javascript
import JPEG from 'jay-peg';

const jpegBuffer = /* your JPEG buffer here */;
const imageMarkers = JPEG.decoder(jpegBuffer);

console.log(imageMarkers);
```

## Example Output

The output consists of a structured array of image markers:

```javascript
[
  {
    type: 65496,
    name: "SOI",
  },
  {
    type: 65505,
    name: "EXIF",
    length: 16382,
    identifier: "Exif\x00\x00",
    entries: [Object],
  },
  {
    type: 65499,
    name: "DAC",
    length: 132,
    tables: [[Object], [Object]],
  },
  // ... and so forth
  {
    type: 65497,
    name: "EOI",
  },
];
```

## API

### `decoder(buffer: Buffer | Uint8Array): Array<ImageMarker>`

The `decoder` function accepts a JPEG buffer as its sole argument and returns an array of image markers.

#### Parameters

- `buffer`: A Buffer or Uint8Array containing the JPEG image data.

#### Returns

An array of objects representing various markers found in the JPEG image.

### `ImageMarker`

Each `ImageMarker` object in the output array adheres to the following structure:

- `type` (Number): The marker type.
- `name` (String): The marker name.
- `length` (Number): The length of the marker data.
- Additional properties specific to certain marker types.

## Performance

Performance is a key focus of `jay-peg`. 4 sizes of images were benchmarked:

- `small`: 300 × 150, 8KB image
- `medium`: 800 × 600, 70KB image
- `large`: 1920 × 1080, 332KB image
- `huge`: 2448×3264, 2.2MB image

For each of these, the decoding speed was measured as follows:

```
Benchmarked: small:  x 13,393 ops/sec ±4.77% (96 runs sampled)
Benchmarked: medium:  x 12,894 ops/sec ±0.10% (99 runs sampled)
Benchmarked: large:  x 9,241 ops/sec ±0.25% (99 runs sampled)
Benchmarked: huge:  x 2,672 ops/sec ±0.12% (100 runs sampled)
```

_Measures were taken in an MacBook Air 2024, Apple M3 w/16GB of RAM._

## License

`jay-peg` is released under the [MIT License](LICENSE)

---
_Source: https://npm.io/package/jay-peg · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
