Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/quramy/decode-tiff
:zap: A lightweight JavaScript TIFF decoder :art:
https://github.com/quramy/decode-tiff
image javascript tiff
Last synced: 4 months ago
JSON representation
:zap: A lightweight JavaScript TIFF decoder :art:
- Host: GitHub
- URL: https://github.com/quramy/decode-tiff
- Owner: Quramy
- License: mit
- Created: 2017-07-17T11:39:20.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-10-31T16:55:13.000Z (over 6 years ago)
- Last Synced: 2024-10-05T14:01:53.870Z (4 months ago)
- Topics: image, javascript, tiff
- Language: JavaScript
- Homepage:
- Size: 1.26 MB
- Stars: 17
- Watchers: 4
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# decode-tiff
[![npm version](https://badge.fury.io/js/decode-tiff.svg)](https://badge.fury.io/js/decode-tiff)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT):zap: A lightweight pure JavaScript TIFF decoder. :art:
## How to use it
### With Node.js```sh
npm i decode-tiff
```The following example reads .tiff and converts to .png file using [pngjs](https://www.npmjs.com/package/pngjs).
```js
const { decode } = require("decode-tiff");const { PNG } = require("pngjs");
const fs = require("fs");const { width, height, data } = decode(fs.readFileSync(__dirname + "/lena_color.tiff"));
const png = new PNG({ width, height });
png.data = data;
fs.writeFileSync(__dirname + "/lena.png", PNG.sync.write(png));
```### With Browser
Download script file from [dist/decode-tiff.min.js](https://raw.githubusercontent.com/Quramy/decode-tiff/master/dist/decode-tiff.min.js). Alternatively you can use Module Bundler, such as webpack, Browserify, and Rollup.
This example shows metadata of the dropped file. [Working demonstration is here.](https://quramy.github.io/decode-tiff/)
```html
Drop TIFF file here!
const { decode } = window.decodeTiff;
const elm = document.getElementById("drop");
elm.addEventListener("dragenter", e => e.preventDefault());
elm.addEventListener("dragover", e => e.preventDefault());
elm.addEventListener("drop", e => {
e.preventDefault();
const file = e.dataTransfer.files[0];
const reader = new FileReader();
reader.addEventListener("load", e => {
const arrayBuffer = e.target.result;
const { width, height, ifdEntries } = decode(arrayBuffer);
const metadata = JSON.stringify({ width, height, ifdEntries }, null, 2);
elm.innerHTML = `<pre>${metadata}</pre>`;
});
reader.readAsArrayBuffer(file);
});```
## API
### `decode(buffer: ArrayBuffer | Buffer, options?: { singlePage?: boolean }): TiffImage | TiffImage[]`- params
- `buffer` - *Required* - Buffer of the target TIFF image. Node.js Buffer and ECMA Script's ArrayBuffer are acceptable.
- `options.singlePage` - *Optional (default: `true`)* - If true, this function returns a single TiffImage object. If the input has 2 or more pages, return value will be the first page.
- returns
- `TiffImage` - An object.
- `TiffImage.width` - *number* - Width of the input image.
- `TiffImage.height` - *number* - Height of the input image.
- `TiffImage.data` - *Uint8Array* - Image pixel data. Every pixel consists 4 bytes: R, G, B, A (opacity)
- `TiffImage.ifdEntries` - *{[key: string]: Array}* - Each IFD entries of the input image.## Compatibility
- Byte Order
- [x] Little endian
- [x] Big endian
- Color resolusion
- [x] 32bit Full Colors
- [x] 24bit Full Colors
- [x] 8bit Gray scale
- [x] 4bit Gray scale
- [ ] Palette-Color
- [ ] Bilevel(white)
- [ ] Bilevel(black)
- Compression
- [x] No Compression
- [ ] CCITT Group 3
- [ ] LZW Compression
- [ ] ZIP
- [ ] Packbits
- Masking
- [ ] Transparency Mask## License
MIT. See LICENSE.txt.