png.js 911 B

123456789101112131415161718192021222324252627282930313233343536
  1. 'use strict';
  2. var pngSignature = 'PNG\r\n\x1a\n';
  3. var pngImageHeaderChunkName = 'IHDR';
  4. var pngFriedChunkName = 'CgBI'; // Used to detect "fried" png's: http://www.jongware.com/pngdefry.html
  5. function isPNG (buffer) {
  6. if (pngSignature === buffer.toString('ascii', 1, 8)) {
  7. var chunkName = buffer.toString('ascii', 12, 16);
  8. if (chunkName === pngFriedChunkName) {
  9. chunkName = buffer.toString('ascii', 28, 32);
  10. }
  11. if (chunkName !== pngImageHeaderChunkName) {
  12. throw new TypeError('invalid png');
  13. }
  14. return true;
  15. }
  16. }
  17. function calculate (buffer) {
  18. if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) {
  19. return {
  20. 'width': buffer.readUInt32BE(32),
  21. 'height': buffer.readUInt32BE(36)
  22. };
  23. }
  24. return {
  25. 'width': buffer.readUInt32BE(16),
  26. 'height': buffer.readUInt32BE(20)
  27. };
  28. }
  29. module.exports = {
  30. 'detect': isPNG,
  31. 'calculate': calculate
  32. };