Sha256: 59de2577117e1fc46abdaf1129d83aa247416e1b6fd58bb16ea91d2bd4e64fbd
Contents?: true
Size: 1.31 KB
Versions: 2
Compression:
Stored size: 1.31 KB
Contents
'use strict'; // based on https://developers.google.com/speed/webp/docs/riff_container function isWebP (buffer) { var riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4); var webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12); var vp8Header = 'VP8' === buffer.toString('ascii', 12, 15); return (riffHeader && webpHeader && vp8Header); } function calculate (buffer) { var chunkHeader = buffer.toString('ascii', 12, 16); buffer = buffer.slice(20, 30); // Lossless webp stream signature if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) { return calculateLossy(buffer); } // Lossy webp stream signature var signature = buffer.toString('hex', 3, 6); if (chunkHeader === 'VP8L' && signature !== '9d012a') { return calculateLossless(buffer); } return false; } function calculateLossless (buffer) { return { 'width': 1 + (((buffer[2] & 0x3F) << 8) | buffer[1]), 'height': 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)) }; } function calculateLossy (buffer) { // `& 0x3fff` returns the last 14 bits // TO-DO: include webp scaling in the calculations return { 'width': buffer.readInt16LE(6) & 0x3fff, 'height': buffer.readInt16LE(8) & 0x3fff }; } module.exports = { 'detect': isWebP, 'calculate': calculate };
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
less-execjs-2.6.0.4 | lib/less/js/image-size/lib/types/webp.js |
less-execjs-2.6.0.3 | lib/less/js/image-size/lib/types/webp.js |