|
8 | 8 | // for the extended copyright notice. |
9 | 9 | "use strict"; |
10 | 10 |
|
11 | | -module.exports = Bitmap; |
| 11 | +if (typeof module == 'object' && typeof exports == 'object') { |
| 12 | + module.exports = Bitmap; |
| 13 | +} |
12 | 14 |
|
13 | | -// bgcolor is optional, defaults to #fff |
| 15 | +// bgcolor is optional, defaults to transparent |
14 | 16 | function Bitmap(cvsid, rot, bgcolor) { |
15 | 17 | var rgb = [0, 0, 0]; |
16 | 18 | var padx = 0; // padding-x |
@@ -46,24 +48,32 @@ function Bitmap(cvsid, rot, bgcolor) { |
46 | 48 | cvs.width = imgwidth + 2*padx; |
47 | 49 | cvs.height = imgheight + 2*pady; |
48 | 50 |
|
49 | | - // Convert from cmyk? |
50 | | - if (bgcolor && bgcolor.length == 8) { |
51 | | - var c = parseInt(bgcolor.substr(0,2), 16) / 255; |
52 | | - var m = parseInt(bgcolor.substr(2,2), 16) / 255; |
53 | | - var y = parseInt(bgcolor.substr(4,2), 16) / 255; |
54 | | - var k = parseInt(bgcolor.substr(6,2), 16) / 255; |
55 | | - var r = Math.floor((1-c) * (1-k) * 255); |
56 | | - var g = Math.floor((1-m) * (1-k) * 255); |
57 | | - var b = Math.floor((1-y) * (1-k) * 255); |
58 | | - bgcolor = 'rgb(' + r + ',' + g + ',' + b + ')'; |
59 | | - } else if (bgcolor) { |
60 | | - bgcolor = '#' + bgcolor; |
61 | | - } |
62 | | - |
63 | 51 | ctx = cvs.getContext('2d'); |
64 | | - ctx.fillStyle = bgcolor || '#fff'; |
65 | | - ctx.fillRect(0, 0, cvs.width, cvs.height); |
66 | | - ctx.fillStyle = '#000'; |
| 52 | + |
| 53 | + // Convert from BWIPP cmyk? |
| 54 | + if (typeof bgcolor == 'string') { |
| 55 | + if (/^[0-9a-fA-F]{8}$/.test(bgcolor)) { |
| 56 | + var c = parseInt(bgcolor.substr(0,2), 16) / 255; |
| 57 | + var m = parseInt(bgcolor.substr(2,2), 16) / 255; |
| 58 | + var y = parseInt(bgcolor.substr(4,2), 16) / 255; |
| 59 | + var k = parseInt(bgcolor.substr(6,2), 16) / 255; |
| 60 | + var r = Math.floor((1-c) * (1-k) * 255); |
| 61 | + var g = Math.floor((1-m) * (1-k) * 255); |
| 62 | + var b = Math.floor((1-y) * (1-k) * 255); |
| 63 | + bgcolor = 'rgb(' + r + ',' + g + ',' + b + ')'; |
| 64 | + // Convert from BWIPP rgb? |
| 65 | + } else if (/^[0-9a-fA-F]{6}$/.test(bgcolor)) { |
| 66 | + bgcolor = '#' + bgcolor; |
| 67 | + } else { |
| 68 | + bgcolor = ''; |
| 69 | + } |
| 70 | + if (bgcolor) { |
| 71 | + var fill = ctx.fillStyle; |
| 72 | + ctx.fillStyle = bgcolor; |
| 73 | + ctx.fillRect(0, 0, cvs.width, cvs.height); |
| 74 | + ctx.fillStyle = fill; |
| 75 | + } |
| 76 | + } |
67 | 77 |
|
68 | 78 | idata = ctx.getImageData(padx, pady, imgwidth, imgheight); |
69 | 79 | bytes = idata.data; |
@@ -99,11 +109,11 @@ function Bitmap(cvsid, rot, bgcolor) { |
99 | 109 | bytes[idx+0] = (bytes[idx+0] * (1 - a) + rgb[0] * a)|0; |
100 | 110 | bytes[idx+1] = (bytes[idx+1] * (1 - a) + rgb[1] * a)|0; |
101 | 111 | bytes[idx+2] = (bytes[idx+2] * (1 - a) + rgb[2] * a)|0; |
102 | | - bytes[idx+3] = 255; |
| 112 | + bytes[idx+3] = (bytes[idx+3] * (1 - a) + 255 * a)|0; |
103 | 113 | } |
104 | 114 |
|
105 | 115 | this.finalize = function(callback) { |
106 | 116 | ctx.putImageData(idata, padx, pady); |
107 | | - callback(null, cvsid); |
| 117 | + callback && callback(null, cvsid); |
108 | 118 | } |
109 | 119 | } |
0 commit comments