123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- '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);
- };
|