-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathgif.js
45 lines (36 loc) · 1014 Bytes
/
gif.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// decode gif buffer
'use strict'
var GifReader = require('omggif').GifReader
module.exports = function read (data, o) {
var reader = new GifReader(Buffer.from(data))
// TODO: handle multiframe gif
// if(reader.numFrames() > 0) {
// var nshape = [reader.numFrames(), reader.height, reader.width, 4]
// try {
// var ndata = new Uint8Array(nshape[0] * nshape[1] * nshape[2] * nshape[3])
// } catch(err) {
// cb(err)
// return
// }
// var result = ndarray(ndata, nshape)
// try {
// for(var i=0; i < reader.numFrames(); ++i) {
// reader.decodeAndBlitFrameRGBA(i, ndata.subarray(
// result.index(i, 0, 0, 0),
// result.index(i+1, 0, 0, 0)))
// }
// } catch(err) {
// cb(err)
// return
// }
// cb(null, result.transpose(0,2,1))
// }
// single frame gif
var pixels = new Uint8Array(reader.width * reader.height * 4)
reader.decodeAndBlitFrameRGBA(0, pixels)
return {
data: pixels,
width: reader.width,
height: reader.height
}
}