-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinteractive.html
107 lines (104 loc) · 2.82 KB
/
interactive.html
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
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' charset='utf-8' />
<title>Image-to-Braille Generator</title>
<style>
.empty {
border: 2px dashed gray;
}
.input {
border: none;
}
.settings {
margin: 10px 0;
}
textarea {
width: 100%;
height: 400px;
resize: vertical;
}
</style>
</head>
<body>
<h1>Image-to-Braille Generator</h1>
<div>
Input File (Or drag-n-drop below):
<input id='file' type='file'><br>
<canvas id='input' class='empty'></canvas>
</div>
<div class='settings'>
Kernel Scale:
<input id='scale' type='number' min='1' max='20' value='3' step='1'><br>
Threshold:
<input id='threshold' type='range' min='1' max='255' value='100'><br>
Invert:
<input id='invert' type='checkbox'><br>
Fix Alignment:
<input id='align' type='checkbox' checked='checked'><br>
</div>
<div>
<textarea id='output'></textarea>
</div>
<script src='./brailleify.js'></script>
<script>
var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');
var fileinput = document.getElementById('file');
var scale = document.getElementById('scale');
var threshold = document.getElementById('threshold');
var align = document.getElementById('align');
var output = document.getElementById('output');
canvas.addEventListener('dragover', function(e) {
e.preventDefault();
});
canvas.addEventListener('dragenter', function(e) {
canvas.style.border = '3px dashed blue';
});
canvas.addEventListener('dragleave', function(e) {
canvas.style.border = '';
});
canvas.addEventListener('drop', function(e) {
e.preventDefault();
canvas.style.border = '';
loadImage(e.dataTransfer.files[0], prep);
});
fileinput.addEventListener('change', function(e) {
loadImage(e.target.files[0], prep);
});
scale.addEventListener('change', prep);
threshold.addEventListener('input', prep);
align.addEventListener('change', prep);
invert.addEventListener('change', prep);
function loadImage(file, callback) {
if (!file.type.match(/image.*/)) {
return alert("File rejected: "+file.name+' type: '+file.type+"\nAccepted file types: .jpg, .png, .gif");
}
let f = new FileReader();
f.onload = function(e) {
let image = new Image();
image.onload = function() {
ctx.clearRect(0,0,canvas.width,canvas.height);
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image,0,0,image.width,image.height);
canvas.className = 'input';
callback(image);
};
image.src = e.target.result;
};
f.readAsDataURL(file);
}
function prep() {
if (canvas.className == 'empty') return;
var image = ctx.getImageData(0, 0, canvas.width, canvas.height);
output.value = brailleify(image, {
align: align.checked,
invert: invert.checked,
threshold: +threshold.value,
scale: +scale.value
});
}
</script>
</body>
</html>