mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'use strict';
 
var hasSyncZlib = true;
var zlib = require('zlib');
if (!zlib.deflateSync) {
  hasSyncZlib = false;
}
var constants = require('./constants');
var Packer = require('./packer');
 
module.exports = function(metaData, opt) {
 
  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 options = opt || {};
 
  var packer = new Packer(options);
 
  var chunks = [];
 
  // Signature
  chunks.push(new Buffer(constants.PNG_SIGNATURE));
 
  // Header
  chunks.push(packer.packIHDR(metaData.width, metaData.height));
 
  if (metaData.gamma) {
    chunks.push(packer.packGAMA(metaData.gamma));
  }
 
  var filteredData = packer.filterData(metaData.data, metaData.width, metaData.height);
 
  // compress it
  var compressedData = zlib.deflateSync(filteredData, packer.getDeflateOptions());
  filteredData = null;
 
  if (!compressedData || !compressedData.length) {
    throw new Error('bad png - invalid compressed data response');
  }
  chunks.push(packer.packIDAT(compressedData));
 
  // End
  chunks.push(packer.packIEND());
 
  return Buffer.concat(chunks);
};