| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 'use strict';var hasSyncZlib = true;var zlib = require('zlib');var inflateSync = require('./sync-inflate');if (!zlib.deflateSync) {  hasSyncZlib = false;}var SyncReader = require('./sync-reader');var FilterSync = require('./filter-parse-sync');var Parser = require('./parser');var bitmapper = require('./bitmapper');var formatNormaliser = require('./format-normaliser');module.exports = function(buffer, options) {  if (!hasSyncZlib) {    throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');  }  var err;  function handleError(_err_) {    err = _err_;  }  var metaData;  function handleMetaData(_metaData_) {    metaData = _metaData_;  }  function handleTransColor(transColor) {    metaData.transColor = transColor;  }  function handlePalette(palette) {    metaData.palette = palette;  }  function handleSimpleTransparency() {    metaData.alpha = true;  }  var gamma;  function handleGamma(_gamma_) {    gamma = _gamma_;  }  var inflateDataList = [];  function handleInflateData(inflatedData) {    inflateDataList.push(inflatedData);  }  var reader = new SyncReader(buffer);  var parser = new Parser(options, {    read: reader.read.bind(reader),    error: handleError,    metadata: handleMetaData,    gamma: handleGamma,    palette: handlePalette,    transColor: handleTransColor,    inflateData: handleInflateData,    simpleTransparency: handleSimpleTransparency  });  parser.start();  reader.process();  if (err) {    throw err;  }  //join together the inflate datas  var inflateData = Buffer.concat(inflateDataList);  inflateDataList.length = 0;  var inflatedData;  if (metaData.interlace) {    inflatedData = zlib.inflateSync(inflateData);  }  else {    var rowSize = ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;    var imageSize = rowSize * metaData.height;    inflatedData = inflateSync(inflateData, { chunkSize: imageSize, maxLength: imageSize });  }  inflateData = null;  if (!inflatedData || !inflatedData.length) {    throw new Error('bad png - invalid inflate data response');  }  var unfilteredData = FilterSync.process(inflatedData, metaData);  inflateData = null;  var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);  unfilteredData = null;  var normalisedBitmapData = formatNormaliser(bitmapData, metaData);  metaData.data = normalisedBitmapData;  metaData.gamma = gamma || 0;  return metaData;};
 |