37 lines
911 B
JavaScript
37 lines
911 B
JavaScript
|
'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
|
||
|
};
|