Skip to content

catdad-experiments/heic-decode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

heic-decode

Decode HEIC images to extract raw pixel data.

CI npm-downloads npm-version

Install

npm install heic-decode

Usage

Decode the main image in the file:

const fs = require('fs');
const { promisify } = require('util');
const decode = require('heic-decode');

(async () => {
  const buffer = await promisify(fs.readFile)('/path/to/my/image.heic');
  const {
    width,  // integer width of the image
    height, // integer height of the image
    data    // Uint8ClampedArray containing pixel data
  } = await decode({ buffer });
})();

Decode all images in the file:

const fs = require('fs');
const { promisify } = require('util');
const decode = require('heic-decode');

(async () => {
  const buffer = await promisify(fs.readFile)('/path/to/my/multi-image.heic');
  const images = await decode.all({ buffer });

  for (let image of images) {
    // decode and use each image individually
    // so you don't run out of memory
    const {
      width,  // integer width of the image
      height, // integer height of the image
      data    // Uint8ClampedArray containing pixel data
    } = await image.decode();
  }

  // when you are done, make sure to free all memory used to convert the images
  images.dispose();
})();

Note: when decoding a single image (i.e. using decode), all resources are freed automatically after the conversion. However, when decoding all images in a file (i.e. using decode.all), you can decode the images at any time, so there is no safe time for the library to free resources -- you need to make sure to call dispose once you are done.

When the images are decoded, the return value is a plain object in the format of ImageData. You can use this object to integrate with other imaging libraries for processing.

Note that while the decoder returns a Promise, it does the majority of the work synchronously, so you should consider using a worker thread in order to not block the main thread in highly concurrent production environments.

Related

  • heic-cli - convert heic/heif images to jpeg or png from the command line
  • heic-convert - convert heic/heif images to jpeg and png
  • libheif-js - libheif as a pure-javascript npm module

About

🤳 decode heic images to extracts the raw pixel data

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •