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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| "use strict";
|
| var zlib = require('zlib');
|
| var crc32 = require('./crc32');
|
| var PNG_HEAD = new Buffer([137,80,78,71,13,10,26,10]);
| var PNG_IHDR = new Buffer([0,0,0,13,73,72,68,82,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]);
| var PNG_IDAT = new Buffer([0,0,0,0,73,68,65,84]);
| var PNG_IEND = new Buffer([0,0,0,0,73,69,78,68,174,66,96,130]);
|
| function png(bitmap, stream) {
| stream.push(PNG_HEAD);
|
| var IHDR = Buffer.concat([PNG_IHDR]);
| IHDR.writeUInt32BE(bitmap.size, 8);
| IHDR.writeUInt32BE(bitmap.size, 12);
| IHDR.writeUInt32BE(crc32(IHDR.slice(4, -4)), 21);
| stream.push(IHDR);
|
| var IDAT = Buffer.concat([
| PNG_IDAT,
| zlib.deflateSync(bitmap.data, { level: 9 }),
| new Buffer(4)
| ]);
| IDAT.writeUInt32BE(IDAT.length - 12, 0);
| IDAT.writeUInt32BE(crc32(IDAT.slice(4, -4)), IDAT.length - 4);
| stream.push(IDAT);
|
| stream.push(PNG_IEND);
| stream.push(null);
| }
|
| function bitmap(matrix, size, margin) {
| var N = matrix.length;
| var X = (N + 2 * margin) * size;
| var data = new Buffer((X + 1) * X);
| data.fill(255);
| for (var i = 0; i < X; i++) {
| data[i * (X + 1)] = 0;
| }
|
| for (var i = 0; i < N; i++) {
| for (var j = 0; j < N; j++) {
| if (matrix[i][j]) {
| var offset = ((margin + i) * (X + 1) + (margin + j)) * size + 1;
| data.fill(0, offset, offset + size);
| for (var c = 1; c < size; c++) {
| data.copy(data, offset + c * (X + 1), offset, offset + size);
| }
| }
| }
| }
|
| return {
| data: data,
| size: X
| }
| }
|
| module.exports = {
| bitmap: bitmap,
| png: png
| }
|
|