1 | "use strict"
|
2 |
|
3 | var ndarray = require("ndarray")
|
4 | var path = require("path")
|
5 | var pngparse = require("pngparse")
|
6 | var ppm = require("ppm")
|
7 | var pack = require("ndarray-pack")
|
8 | var fs = require("fs")
|
9 |
|
10 | function handlePNG(url, cb) {
|
11 | fs.readFile(url, function(err, data) {
|
12 | if(err) {
|
13 | cb(err)
|
14 | return
|
15 | }
|
16 | pngparse.parse(data, function(err, img_data) {
|
17 | if(err) {
|
18 | cb(err)
|
19 | return
|
20 | }
|
21 | cb(undefined, ndarray.ctor(new Uint8Array(img_data.data),
|
22 | [img_data.height|0, img_data.width|0, 4],
|
23 | [4*img_data.width|0, 4, 1],
|
24 | 0))
|
25 | })
|
26 | })
|
27 | }
|
28 |
|
29 | function handlePPM(url, cb) {
|
30 | ppm.parse(fs.createReadStream(url), function(err, pixels) {
|
31 | if(err) {
|
32 | cb(err)
|
33 | return
|
34 | }
|
35 | cb(undefined, pack(pixels, "uint8"))
|
36 | })
|
37 | }
|
38 |
|
39 | module.exports = function getPixels(url, cb) {
|
40 | var ext = path.extname(url)
|
41 | switch(ext.toUpperCase()) {
|
42 | case ".PNG":
|
43 | handlePNG(url, cb)
|
44 | break
|
45 |
|
46 | case ".PPM":
|
47 | handlePPM(url, cb)
|
48 | break
|
49 |
|
50 | default:
|
51 | process.nextTick(function() {
|
52 | cb(new Error("Unsupported file type: " + ext))
|
53 | })
|
54 | }
|
55 | }
|