3 var hasSyncZlib = true;
4 var zlib = require('zlib');
5 var inflateSync = require('./sync-inflate');
6 if (!zlib.deflateSync) {
9 var SyncReader = require('./sync-reader');
10 var FilterSync = require('./filter-parse-sync');
11 var Parser = require('./parser');
12 var bitmapper = require('./bitmapper');
13 var formatNormaliser = require('./format-normaliser');
16 module.exports = function(buffer, options) {
19 throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
23 function handleError(_err_) {
28 function handleMetaData(_metaData_) {
29 metaData = _metaData_;
32 function handleTransColor(transColor) {
33 metaData.transColor = transColor;
36 function handlePalette(palette) {
37 metaData.palette = palette;
40 function handleSimpleTransparency() {
41 metaData.alpha = true;
45 function handleGamma(_gamma_) {
49 var inflateDataList = [];
50 function handleInflateData(inflatedData) {
51 inflateDataList.push(inflatedData);
54 var reader = new SyncReader(buffer);
56 var parser = new Parser(options, {
57 read: reader.read.bind(reader),
59 metadata: handleMetaData,
61 palette: handlePalette,
62 transColor: handleTransColor,
63 inflateData: handleInflateData,
64 simpleTransparency: handleSimpleTransparency
74 //join together the inflate datas
75 var inflateData = Buffer.concat(inflateDataList);
76 inflateDataList.length = 0;
79 if (metaData.interlace) {
80 inflatedData = zlib.inflateSync(inflateData);
83 var rowSize = ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;
84 var imageSize = rowSize * metaData.height;
85 inflatedData = inflateSync(inflateData, { chunkSize: imageSize, maxLength: imageSize });
89 if (!inflatedData || !inflatedData.length) {
90 throw new Error('bad png - invalid inflate data response');
93 var unfilteredData = FilterSync.process(inflatedData, metaData);
96 var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
97 unfilteredData = null;
99 var normalisedBitmapData = formatNormaliser(bitmapData, metaData);
101 metaData.data = normalisedBitmapData;
102 metaData.gamma = gamma || 0;