nimPNG/readme.md

84 lines
2.7 KiB
Markdown
Raw Normal View History

2015-08-28 15:56:55 +00:00
#nimPNG
2015-09-30 05:45:24 +00:00
Portable Network Graphics Encoder and Decoder written in Nim store lossless image with good compression
2015-08-28 15:56:55 +00:00
all PNG standard color mode are supported:
- LCT_GREY = 0, # greyscale: 1,2,4,8,16 bit
- LCT_RGB = 2, # RGB: 8,16 bit
- LCT_PALETTE = 3, # palette: 1,2,4,8 bit
- LCT_GREY_ALPHA = 4, # greyscale with alpha: 8,16 bit
- LCT_RGBA = 6 # RGB with alpha: 8,16 bit
both interlaced and non-interlaced mode supported
recognize all PNG standard chunks:
IHDR, IEND, PLTE, IDAT, tRNS, bKGD, pHYs, tIME, iTXt, zTXt
tEXt, gAMA, cHRM, sRGB, iCCP, sBIT, sPLT, hIST
unknown chunks will be handled properly
the following chunks are supported (generated/interpreted) by both encoder and decoder:
- IHDR: header information
- PLTE: color palette
- IDAT: pixel data
- IEND: the final chunk
- tRNS: transparency for palettized images
- tEXt: textual information
- zTXt: compressed textual information
- iTXt: international textual information
- bKGD: suggested background color
- pHYs: physical dimensions
- tIME: modification time
the following chunks are parsed correctly, but not used by decoder:
cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
Supported color conversions:
- anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
- any grey or grey+alpha, to grey or grey+alpha
- anything to a palette, as long as the palette has the requested colors in it
- removing alpha channel
2015-09-03 04:56:22 +00:00
- higher to smaller bitdepth, and vice versa
2015-09-30 05:45:24 +00:00
###Planned Feature(s):
2015-09-03 04:56:22 +00:00
- streaming for progressive loading
2015-09-30 05:45:24 +00:00
##Basic Usage
```nimrod
import nimPNG
let png = loadPNG32("image.png")
#is equivalent to:
#let png = loadPNG("image.png", LCT_RGBA, 8)
#will produce rgba pixels:
#png.width -> width of the image
#png.height -> height of the image
#png.data -> pixels data in RGBA format
```
if you already have the whole file in memory
let png = decodePNG32(raw_bytes)
will do the same as above
other variants:
loadPNG24 -> will produce pixels in RGB format 8 bpp
decodePNG24 -> load png from memory instead of file
to create PNG:
savePNG32("output.png", rgba_pixels, width, height)
or savePNG24
encodePNG32(rgba_pixels, width, height)
or encodePNG24
use **loadPNG** or **savePNG** if you need specific input/output format by supplying supported **colorType** and **bitDepth** information. Use **encodePNG** or **decodePNG** to do in memory encoding/decoding by supplying desired colorType and bitDepth information
pixels are stored as raw bytes using Nim's string as container.
r1,g1,b1,a1,r2,g2,b2,a1,...,rn,gn,bn,an -> RGBA format 8 bit
r1,g1,b1,r2,g2,b2,...,rn,gn,bn -> RGB format 8 bit
grey1,grey2,grey3, ..., greyn -> GREY format 8 bit
grey1,alpha1,grey2,alpha2,...,greyn,alphan -> GREY ALPHA format 8 bit