Skip to content

saicoder/libtiff.js

Repository files navigation

libtiff.js

This is port of C LibTIFF to JavaScript using Emscripten and WebAssembly. I created this library because I had issues with editing complex multi-channel TIFFs with custom tags like from Photoshop using other libraries. Most of the libraries are focused on decoding image, not encoding them with different compressions.

Aim of this library is to be low-level and to work in browser and on server. For hight level image decoding you can use UTIF.js

Example of creating image:

import { TIFFImage, TagName, initRuntime } from 'libtiff'

await initRuntime({
    // optionally provide ether function to find web assembly: locateFile: () => string (URL)
    // or wasmBinary: ArrayBuffer 
})

const image = await TIFF.new()

image.writeTag(TagName.IMAGEWIDTH, 'UINT16', width)
image.writeTag(TagName.IMAGELENGTH, 'UINT16', height)
image.writeTag(TagName.SAMPLESPERPIXEL, 'UINT16', 3) // rgb
image.writeTag(TagName.BITSPERSAMPLE, 'UINT16', 8) // 8 bits per channel
image.writeTag(TagName.PLANARCONFIG, 'UINT16', 1) // RRGGBB
image.writeTag(TagName.PHOTOMETRIC, 'UINT16', 2) // RGB Image
image.writeTag(TagName.COMPRESSION, 'UINT16', 8) // LZW

image.writeImageData(exampleImageData) // exampleImageData = Uint8array of pixel data RGB

const tiffData = image.getTIFFData() // Uint8Array
Bun.write('./generated.tiff', tiffData)

Check examples directory for more examples.

Building lib

# Make sure that you have build tools 
# Make sure that you have https://emscripten.org/ installed and setup
# Clone all submodules

# Run:
make

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published