'use strict'; var pngSignature = 'PNG\r\n\x1a\n'; var pngImageHeaderChunkName = 'IHDR'; var pngFriedChunkName = 'CgBI'; // Used to detect "fried" png's: http://www.jongware.com/pngdefry.html function isPNG (buffer) { if (pngSignature === buffer.toString('ascii', 1, 8)) { var chunkName = buffer.toString('ascii', 12, 16); if (chunkName === pngFriedChunkName) { chunkName = buffer.toString('ascii', 28, 32); } if (chunkName !== pngImageHeaderChunkName) { throw new TypeError('invalid png'); } return true; } } function calculate (buffer) { if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) { return { 'width': buffer.readUInt32BE(32), 'height': buffer.readUInt32BE(36) }; } return { 'width': buffer.readUInt32BE(16), 'height': buffer.readUInt32BE(20) }; } module.exports = { 'detect': isPNG, 'calculate': calculate };