-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathalphacomponent.js
115 lines (109 loc) · 4.08 KB
/
alphacomponent.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"use strict";
/*
* 2021/04/07- (c) [email protected]
*/
document.addEventListener("DOMContentLoaded", function(event) {
main();
});
function main() {
// console.debug("main");
const srcCanvas = document.getElementById("srcCanvas");
const dstCanvasArr = ["dstCanvas0", "dstCanvas1", "dstCanvas2", "dstCanvas3", "dstCanvas4", "dstCanvas"].map(function(id) { return document.getElementById(id); });
const params = { srcCanvas, dstCanvasArr };
//
dropFunction(document, function(dataURL) {
loadImageData(dataURL, function(imageData) {
params.srcImageData = imageData;
drawSrcImageDataAndAlphacomponent(params);
});
}, "DataURL");
//
bindFunction({"maxWidthHeight":"maxWidthHeightText",
"backgroundColor":"backgroundColorText",
"checkboard":null,
"multi1":"multi1Text", "plus1":"plus1Text",
"multi2":"multi2Text", "plus2":"plus2Text",
"multi3":"multi3Text", "plus3":"plus3Text",
"multi4":"multi4Text", "plus4":"plus4Text"},
function() {
drawSrcImageDataAndAlphacomponent(params);
}, params);
const dataURL = "img/CMYK.png";
loadImageData(dataURL, function(imageData) {
params.srcImageData = imageData;
drawSrcImageDataAndAlphacomponent(params);
});
}
function drawSrcImageDataAndAlphacomponent(params) {
const { srcImageData, srcCanvas, maxWidthHeight } = params;
drawSrcImageData(srcImageData, srcCanvas, maxWidthHeight);
drawAlphacomponent(params);
}
function alphacomponent(dstImageDataArr, params) {
const { srcImageData, multi1, multi2, multi3, multi4,
plus1, plus2, plus3, plus4,
} = params;
const {width, height, data } = srcImageData;
const [rgbData, rData, gData, bData, aData, dstData] = dstImageDataArr.map(function(idata) {
return idata.data;
});
const count = width * height * 4;
for (let i = 0; i < count; ) {
rData[i] = (data[i++] * multi1) + (plus1 * 255);
rData[i++] = rData[i++] = 0;
rData[i++] = 255;
}
for (let i = 0; i < count; ) {
gData[i++] = 0;
gData[i] = (data[i++] * multi2) + (plus2 * 255);
gData[i++] = 0;
gData[i++] = 255;
}
for (let i = 0; i < count; ) {
bData[i++] = bData[i++] = 0;
bData[i] = (data[i++] * multi3) + (plus3 * 255);
bData[i++] = 255;
}
for (let i = 0; i < count; ) {
aData[i++] = aData[i++] = aData[i++] = (data[i] * multi4) + (plus4 * 255);
aData[i++] = 255;
}
for (let i = 0; i < count; ) {
rgbData[i] = (data[i++] * multi1) + (plus1 * 255);
rgbData[i] = (data[i++] * multi2) + (plus2 * 255);
rgbData[i] = (data[i++] * multi3) + (plus3 * 255);
rgbData[i] = 255; i++;
}
for (let i = 0; i < count; ) {
dstData[i] = (data[i++] * multi1) + (plus1 * 255);
dstData[i] = (data[i++] * multi2) + (plus2 * 255);
dstData[i] = (data[i++] * multi3) + (plus3 * 255);
dstData[i] = (data[i++] * multi4) + (plus4 * 255);
}
}
function drawAlphacomponent(params) {
const { srcImageData, srcCanvas, dstCanvasArr, maxWidthHeight,
backgroundColor, checkboard } = params;
const allCanvases = [srcCanvas].concat(...dstCanvasArr);
allCanvases.forEach(function(canvas, i) {
if (checkboard) {
canvas.classList.add("checkboard");
} else {
if (canvas.classList.contains("checkboard")) {
canvas.classList.remove("checkboard");
}
}
canvas.style.backgroundColor = backgroundColor;
});
const dstCtxArr = dstCanvasArr.map(function(c) {
return c.getContext("2d");
});
const srcWidth = srcImageData.width, srcHeight = srcImageData.height;
const dstImageDataArr = dstCtxArr.map(function(c) {
return c.createImageData(srcWidth, srcHeight);
});
alphacomponent(dstImageDataArr, params);
dstImageDataArr.forEach(function(imageData, i) {
drawSrcImageData(imageData, dstCanvasArr[i], maxWidthHeight);
});
}