# jay-peg ## 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` 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)