123456789101112131415161718192021222324252627282930313233343536 |
- '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
- };
|