Skip to content

PauT/PNG.ts

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PNG.ts

JavaScript PNG decoder written in TypeScript

Dependence

  • PNG.ts needs DEFLATE library like pako, zlib.js or other zlib compatible one.

Usage

browser

<script src="../bower_components/jszip/dist/jszip.min.js"></script>
<script src="../dist/PNG.js"></script>
<script>
getBuffer("./Lenna.png").then(function(buffer){
  var reader = new PNG.PNGReader(buffer);
  reader.deflate = JSZip.compressions.DEFLATE.uncompress;
  var png = reader.parse();
  var decoded = png.getUint8ClampedArray();

  var cnv = document.createElement('canvas');
  var ctx = cnv.getContext('2d');
  var width = cnv.width = png.width;
  var height = cnv.height = png.height;
  var imageData = ctx.getImageData(0, 0, width, height);

  imageData.data.set(decoded);
  ctx.putImageData(imageData, 0, 0);
  document.body.appendChild(cnv);
});

function getBuffer(url){
  return new Promise(function(resolve, reject){
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "arraybuffer";
    xhr.onload = function (ev) {
      var arrayBuffer = xhr.response;
      resolve(arrayBuffer);
    };
    xhr.send(null);
  });
}
</script>

webworker

importScript("../bower_components/jszip/dist/jszip.min.js");
importScript("../dist/PNG.js");
self.onmessage = function(ev){
  var buffer = ev.data;
  var reader = new PNG.PNGReader(buffer, {deflate:deflate});
  var reader.deflate = JSZip.compressions.DEFLATE.uncompress;
  var png = reader.parse();
  var decoded = png.getUint8ClampedArray();
  self.postMessage(decoded, [decoded]);
}

commonjs

var tmp = require("PNG.ts");
var PNG = tmp.PNG;
var PNGReader = tmp.PNGReader;

Development

npm install -g bower dtsm http-server
npm run init
npm run build

Document

PNGReader Class

constructor(data: ArrayBuffer): PNGReader

parse():PNG

PNG Class

width: number

height: number

getUint8ClampedArray(): Uint8ClampedArray

TODO

  • interlace png decoder

related works

About

JavaScript PNG decoder written in TypeScript

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 49.0%
  • JavaScript 48.0%
  • HTML 1.7%
  • CoffeeScript 1.3%