Code Monkey home page Code Monkey logo

fast-png's Introduction

image-js

Advanced image processing and manipulation in JavaScript.

image-js is a full-featured library that can deal with simple image processing (color leveling, grey image, mask, resize, rotation, etc.) as well as advanced processing on scientific images (Region of interest (ROI), Hull curve, minimal boundary rectangle (MBR), particle size and orientation, cell imaging, etc.).

Zakodium logo

Maintained by Zakodium

NPM version build status Test coverage npm download

Installation

$ npm install image-js

Features

Supported image formats

The following formats can be loaded by image-js:

  • PNG (8 or 16 bits, color or greyscale, with or without alpha, palette 1 - 8 bits)
  • JPEG
  • TIFF (8 or 16 bits, color or greyscale, supports LZW compression)

The following formats can be saved by image-js:

  • PNG (8 or 16 bits)
  • JPEG
  • BMP (black and white)

Native support for various bit depths and image kinds

image-js was developed to be used in scientific applications where we often have to work on images that have more that 8 bits per channel.
Unlike many other libraries, if a 16-bit greyscale PNG is decoded, the resulting image has only one 16-bit channel and no pixel information is lost.

image-js can work with images that have 1 (binary), 8, 16 or 32 bits per channel.
It can accept an arbitrary amount of color channels (usually 1 or 3) and can handle an additional alpha component.

Basic image manipulation

image-js can be used to do simple image manipulations such as:

  • Resize
  • Crop
  • Rotate
  • Convert to greyscale
  • Invert colors
  • Gaussian blur
  • Extract individual channels (red, green or blue)
  • And more...

Statistics

image-js implements a number of functions to get statistics about an image:

  • Histogram
  • Max, min, median value
  • And more ...

Advanced features for computer vision

  • Image thresholding (otsu, triangle, ...)
  • Regions of interest
  • Convolution with custom kernel
  • Sobel filter
  • Morphological transformations (open, close, erode, ...)

An example using npm and node

Install the library:

npm i image-js

An example of code manipulating the image 'cat.jpg' (you need to create it).

const { Image } = require('image-js');

execute().catch(console.error);

async function execute() {
  let image = await Image.load('cat.jpg');
  let grey = image
    .grey() // convert the image to greyscale.
    .resize({ width: 200 }) // resize the image, forcing a width of 200 pixels. The height is computed automatically to preserve the aspect ratio.
    .rotate(30); // rotate the image clockwise by 30 degrees.
  return grey.save('cat.png');
}
node index.js

A greyscale image will be saved in the same folder.

Examples in the browser

Load an image and convert it to grey

<html>
  <head>
    <script src="https://www.lactame.com/lib/image-js/0.21.2/image.min.js"></script>
  </head>

  <body>
    <img
      id="color"
      src="https://www.lactame.com/github/image-js/image-js/3073b80c7d626196cb669f9d617f491a8338ca66/test/img/taxi/original.jpeg"
    />
    <img id="result" />

    <script>
      async function process() {
        let image = await IJS.Image.load(document.getElementById('color').src);

        let grey = image.grey();

        document.getElementById('result').src = grey.toDataURL();
      }
      process();
    </script>
  </body>
</html>

Try it

Create a mask

Try it

Paint a mask

Try it

Filter a mask using Region Of Interests (ROIs)

Image-js has a powerful Region of Interests Manager that allows to create ROIs from different sources. The ROIs can then be filtered, manipulated and finally painted to an RGBA image.

Try it

When extracting a mask from a ROI you have many options (contour, box, filled, center, hull or normal). Here it looks better to use the filled ROI.

Try it

Advanced analysis of SEM / TEM images

This library is able to deal with complex analysis involving images of cell or SEM / TEM. It will deal correctly with 16 bits grey scale images (TIFF or PNG) commonly found in scientific results.

In this example we will annotate an SEM / TEM image by coloring each particle and show the surface of them.

We also display a table containing a summary of all the identified particles.

Try it

Development

Contributions to code or documentation are welcome! Here are a few tips on how to setup a development environment for image-js.

Canvas

The canvas native addon library is required for all tests to pass. You can follow the instructions to install it on your OS here.

License

MIT

fast-png's People

Contributors

cheminfo-bot avatar greenkeeperio-bot avatar lpatiny avatar opatiny avatar p01 avatar rawnsley avatar sebastien-ahkrin avatar targos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fast-png's Issues

JHKAJKH aKShjk aSDHJKasdhjk ads JHKAJKH aKShjk aSDHJKasdhjk ads JHKAJKH aKShjk aSDHJKasdhjk ads JHKAJKH aKShjk aSDHJKasdhjk ads JHKAJKH aKShjk aSDHJKasdhjk ads JHKAJKH aKShjk aSDHJKasdhjk ads #27

hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asf̶̻᷈dhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad h̷̺̕jklah jd hjasdfjlkkhj asfdhk jadsfh̷̡̓ kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjk̵͚᷅lah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk ja̸̤᷆dsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jka̴̤︣d hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdh̶̞̚k jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjaś̴̼dh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjkla̶̩︢h jd hjasdfjlkkhj asf̸̗᷉dhk jadsfh kjasdh jkad hjkl̶̰ͮah jd hjasdfjlkk̶̩͠hj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hj̴̅͢klah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hj̸̖̋asdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfḧ̷᷊ kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd h̶̛̳jasdfj̴͈᷅lkkhj asfdhk jadsfh kjasdh j̷̗᷃kad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfj̴̼̈́lkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdf̷̟̚jlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlk̷̳͐khj asfdhk jadsfh kjasdh j̸̪ͮkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfj̶͎ͨlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfj̴᷂᷉lkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hj̶͕̉asdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah̸͈ͯ jd hjasdfjlkkhj asfdhk jadsfh kjasdh jka̵̙᷅d hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkk̴͔̀hj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hja̴̠͋sdfjlkkhj asfdhk jadsfh kjasdh jkad hjkl̵̠̈́ah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jka̶̡͂d hjkla̷̯᷀h jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh j̷͎͗kad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd h̶̦̆jasdfjlkkhj asfdhk jadsfh̷̺͌ kjasdh jkad hjklah jd hjasdfj̷̣̆lkkhj asfdhk̸̭︠ jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh̵̲͆ jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asf̵̱͗dhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkà̴͉d hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad h̷̗ͯjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd hjasdfjlkkhj asfdhk jadsfh kjasdh jkad hjklah jd

Compute CRC

  • Add an option in the decoder to check the CRC.
  • put the correct CRC in the encoder

Web Browser problem

Hi, can you make it work in a web browser?
I am getting a following error:
PNGDecoder.js:3 Uncaught ReferenceError: require is not defined

Add support for APNG

Add the support for animated PNG.

decodeToBeDefined that returns systematically an array of images.

Dependency problem?

I installed the latest version of fast-png (4.0.1), and I get the following error:

TypeError: IOBuffer is not a constructor

There seems to be some incompatibility between fast-png and the latest version of iobuffer (also 4.0.1), which meets fast-png's dependencies.

I had to downgrade to [email protected], which pulls in [email protected], and that worked fine.

Normalize to RGBA when decoding indexed images

@targos Thanks for such a nice library! Just sharing something I found unexpected (after trying to switch to fast-png from pngjs):

  • If you want to manipulate pixel data after decoding an indexed image, you have to normalize it into RGBA (from palette + indices) manually. This is 1) not documented, 2) inconvenient. Maybe worth adding a normalize option to decode?
  • The format of the palette property is [[r, g, b], [r, g, b]], which is inefficient — allocating more memory than necessary. Since we know the number of colors before hand, ideally this would be returned in flat typed form — Uint8ClampedArray([r, g, b, r, g, b, ...]).

Feature request: Export function for png signature check

It would be great if the library would export a isPng(data: ImageData) : boolean function that does the png signature check (which is already happening internally)

This way I could avoid catching the error when trying to decode a non-png and just check pre-emptively.

Extract resolution information

jpeg and tiff converter are able to extrat EXIF information and I guess resolution as well.

Would be nice if all the libraries are able to provide the Resolution and put it somewhere at the same place so that we can directly get it from image-js

Resolution seems to be stored in the pHYs

https://www.w3.org/TR/PNG/#11pHYs

1bit greyscale encoder support

Any plans on supporting bit depths other than 8 and 16? I would have use for a 1bit greyscale implementation. Also not averse to contributing but would like some hints why other depths weren't implemented before I spent time and dig in to avoid double work.

Great library btw. I'm really impressed with the speed, it even beat the ImageDecoder from the browser built-in WebCodecs for small greyscale pngs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.