-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdotize.js
78 lines (75 loc) · 2.79 KB
/
dotize.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
"use strict";
/*
* 2017/02/26- (c) [email protected]
*/
document.addEventListener("DOMContentLoaded", function(event) {
main();
});
function main() {
// console.debug("main");
var srcCanvas = document.getElementById("srcCanvas");
var dstCanvas = document.getElementById("dstCanvas");
var srcImage = new Image(srcCanvas.width, srcCanvas.height);
var params = {};
dropFunction(document, function(dataURL) {
srcImage = new Image();
srcImage.onload = function() {
let maxWidthHeight = params["maxWidthHeightRange"];
drawSrcImage(srcImage, srcCanvas, maxWidthHeight);
drawDotize(srcCanvas, dstCanvas, params);
}
srcImage.src = dataURL;
}, "DataURL");
bindFunction({"scaleRange":"scaleText",
"borderRange":"borderText",
"borderColorText":null},
function() { drawDotize(srcCanvas, dstCanvas, params) },
params);
bindFunction({"maxWidthHeightRange":"maxWidthHeightText"},
function() {
let maxWidthHeight = params["maxWidthHeightRange"];
drawSrcImage(srcImage, srcCanvas, maxWidthHeight);
drawDotize(srcCanvas, dstCanvas, params);
}, params);
}
function drawDotize(srcCanvas, dstCanvas, params) {
// console.debug("drawDotize", params);
var scale = params["scaleRange"];
var border = params["borderRange"];
var borderColor = params["borderColorText"];
var borderRGBA = getRGBAfromHexColor(borderColor);
//
var srcCtx = srcCanvas.getContext("2d");
var dstCtx = dstCanvas.getContext("2d");
var srcWidth = srcCanvas.width, srcHeight = srcCanvas.height;
var dstWidth = srcWidth * scale + (srcWidth + 1) * border;
var dstHeight = srcHeight * scale + (srcHeight + 1) * border;
dstCanvas.width = dstWidth;
dstCanvas.height = dstHeight;
//
var srcImageData = srcCtx.getImageData(0, 0, srcWidth, srcHeight);
var dstImageData = dstCtx.createImageData(dstWidth, dstHeight);
var srcData = srcImageData.data;
var dstData = dstImageData.data;
for (var dstY = 0 ; dstY < dstHeight; dstY++) {
for (var dstX = 0 ; dstX < dstWidth; dstX++) {
var srcX = Math.floor(dstX / (scale+border));
var srcY = Math.floor(dstY / (scale+border));
var srcOffset = 4 * (srcX + srcY * srcWidth);
var dstOffset = 4 * (dstX + dstY * dstWidth);
if (((dstX % (scale+border)) < border) ||
((dstY % (scale+border)) < border)) {
dstData[dstOffset++] = borderRGBA[0];
dstData[dstOffset++] = borderRGBA[1];
dstData[dstOffset++] = borderRGBA[2];
dstData[dstOffset++] = borderRGBA[3];
} else {
dstData[dstOffset++] = srcData[srcOffset++];
dstData[dstOffset++] = srcData[srcOffset++];
dstData[dstOffset++] = srcData[srcOffset++];
dstData[dstOffset++] = srcData[srcOffset++];
}
}
}
dstCtx.putImageData(dstImageData, 0, 0);
}