edit_reference.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <link rel="icon" href="favicon.ico?v=$COMMIT_HASH" type="image/x-icon">
  5. <title>Make Reference</title>
  6. <meta charset="utf-8"/>
  7. <style>
  8. h1 {font-size: 2em;}
  9. h2 {font-size: 1.5em; margin-block-start: 0.0em; margin-block-end: 0.2em;}
  10. h3 {font-size: 1.2em;}
  11. p {font-size: 1em;}
  12. input[type=number] {
  13. width: 100px;
  14. margin-right: 10px;
  15. padding: 3px 5px;
  16. display: inline-block;
  17. border: 1px solid #ccc;
  18. font-size: 16px;
  19. }
  20. .button {
  21. padding: 5px 10px;
  22. width: 210px;
  23. font-size: 16px;
  24. }
  25. table {
  26. padding: 5px;
  27. }
  28. </style>
  29. <link href="firework.css?v=$COMMIT_HASH" rel="stylesheet">
  30. <script type="text/javascript" src="jquery-3.6.0.min.js?v=$COMMIT_HASH"></script>
  31. <script type="text/javascript" src="firework.js?v=$COMMIT_HASH"></script>
  32. </head>
  33. <body style="font-family: arial; padding: 0px 10px;">
  34. <h2>Create Reference out of Raw Image</h2>
  35. <p><b>Note: After saving a new Reference Image, make sure to update the Alignment Marks and the ROI's and reboot once!</b></p>
  36. <table>
  37. <tr>
  38. <td><input class="button" type="button" value="Show Actual Reference" onclick="showReference(param)"></td>
  39. <td><input class="button" type="button" value="Create New Reference" onclick="loadRawImage()"></td>
  40. <td><input class="button" type="submit" id="take" onclick="doTake()" value="Take Image"></td>
  41. </tr>
  42. <tr>
  43. <td style="padding-top: 10px"><label for="mirror" id="labelmirror">Mirror Image:</label></td>
  44. <td style="padding-top: 10px"><input type="checkbox" id="mirror" name="mirror" value="1" onchange="drawRotated()"></td>
  45. <td>
  46. <class id="MakeImage_LEDIntensity_text" style="color:black;">LEDIntensity: </class>
  47. <input type="number" id="MakeImage_LEDIntensity_value1" size="13" value=0 min="0" max="100" style="float: right; clear: both;">
  48. </td>
  49. </tr>
  50. <tr>
  51. <td><label for="flip" id="labelflip">Flip Image Size:</label></td>
  52. <td><input type="checkbox" id="flip" name="flip" value="1" onchange="drawRotated()"></td>
  53. <td>
  54. <class id="MakeImage_Brightness_text" style="color:black;">Brightness: </class>
  55. <input type="number" id="MakeImage_Brightness_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
  56. </td>
  57. </tr>
  58. <tr>
  59. <td><label for="mirror">Pre-rotate Angle:</label></td>
  60. <td><input type="number" id="prerotateangle" name="prerotateangle" value="0" min="-360" max="360" onchange="drawRotated()">Degrees</td>
  61. <td>
  62. <class id="MakeImage_Contrast_text" style="color:black;">Contrast</class>
  63. <input type="number" id="MakeImage_Contrast_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
  64. </td>
  65. </tr>
  66. <tr>
  67. <td><label for="mirror">Fine Alignment:</label></td>
  68. <td><input type="number" id="finerotate" name="finerotate" value=0.0 min="-1" max="1" step="0.2" onchange="drawRotated()">Degrees</td>
  69. <td>
  70. <class id="MakeImage_Saturation_text" style="color:black;">Saturation</class>
  71. <input type="number" id="MakeImage_Saturation_value1" size="13" value=0 min="-2" max="2" style="float: right; clear: both;">
  72. </td>
  73. </tr>
  74. </table>
  75. <table>
  76. <tr>
  77. <td><canvas id="canvas"></canvas></td>
  78. </tr>
  79. <tr>
  80. <td><input class="button" type="button" id="updatereferenceimage" value="Save" onclick="SaveReference()"></td>
  81. </tr>
  82. <tr>
  83. <td><button class="button" id="reboot" type="button" onclick="doReboot()">Reboot to activate saved Reference</button></td>
  84. </tr>
  85. </table>
  86. <script type="text/javascript" src="common.js?v=$COMMIT_HASH"></script>
  87. <script type="text/javascript" src="readconfigcommon.js?v=$COMMIT_HASH"></script>
  88. <script type="text/javascript" src="readconfigparam.js?v=$COMMIT_HASH"></script>
  89. <script language="JavaScript">
  90. var canvas = document.getElementById('canvas'),
  91. ctx = canvas.getContext('2d'),
  92. imageObj = new Image()
  93. domainname = getDomainname();
  94. isActReference = false;
  95. param;
  96. function doReboot() {
  97. if (confirm("Are you sure you want to reboot? Did you save the config?")) {
  98. var stringota = getDomainname() + "/reboot";
  99. window.location = stringota;
  100. window.location.href = stringota;
  101. window.location.assign(stringota);
  102. window.location.replace(stringota);
  103. }
  104. }
  105. function doTake(){
  106. var xhttp = new XMLHttpRequest();
  107. if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
  108. {
  109. _intensity = document.getElementById("MakeImage_LEDIntensity_value1").value;
  110. if (_intensity == "") _intensity = "50";
  111. _brightness = document.getElementById("MakeImage_Brightness_value1").value;
  112. _contrast = document.getElementById("MakeImage_Contrast_value1").value;
  113. _saturation = document.getElementById("MakeImage_Saturation_value1").value;
  114. url = getDomainname() + "/editflow?task=test_take&bri=" + _brightness;
  115. url = url + "&con=" + _saturation + "&sat=" + _saturation + "&int=" + _intensity;
  116. }
  117. else
  118. {
  119. url = domainname + "/editflow?task=test_take";
  120. }
  121. if (domainname.length > 0){
  122. url = url + "&host=" + domainname;
  123. }
  124. xhttp.open("GET", url, false);
  125. xhttp.send();
  126. loadRawImage();
  127. }
  128. function loadRawImage(){
  129. url = getDomainname() + "/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
  130. document.getElementById("finerotate").disabled = false;
  131. document.getElementById("prerotateangle").disabled = false;
  132. document.getElementById("updatereferenceimage").disabled = false;
  133. document.getElementById("take").disabled = false;
  134. if (param["Alignment"]["InitialMirror"].found)
  135. document.getElementById("mirror").disabled = false;
  136. else
  137. {
  138. document.getElementById("labelmirror").style = "color:lightgrey;";
  139. }
  140. if (param["Alignment"]["FlipImageSize"].found)
  141. document.getElementById("flip").disabled = false;
  142. else
  143. {
  144. document.getElementById("labelflip").style = "color:lightgrey;";
  145. }
  146. if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
  147. {
  148. document.getElementById("MakeImage_Brightness_value1").disabled = false;
  149. document.getElementById("MakeImage_Contrast_value1").disabled = false;
  150. document.getElementById("MakeImage_Saturation_value1").disabled = false;
  151. document.getElementById("MakeImage_LEDIntensity_value1").disabled = false;
  152. }
  153. else
  154. {
  155. document.getElementById("MakeImage_Brightness_value1").type = "hidden";
  156. document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
  157. }
  158. // if (param["MakeImage"]["Saturation"].found)
  159. // document.getElementById("MakeImage_Saturation_value1").disabled = false;
  160. // if (param["MakeImage"]["Contrast"].found)
  161. // document.getElementById("MakeImage_Contrast_value1").disabled = false;
  162. isActReference = false;
  163. loadCanvas(url);
  164. drawRotated();
  165. }
  166. function showReference(_param){
  167. url = getDomainname() + "/fileserver/config/reference.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);;
  168. document.getElementById("finerotate").value = 0;
  169. document.getElementById("prerotateangle").value = _param["Alignment"]["InitialRotate"].value1;
  170. if (_param["Alignment"]["InitialMirror"].found && (_param["Alignment"]["InitialMirror"].value1 == "true"))
  171. document.getElementById("mirror").checked = true;
  172. if (_param["Alignment"]["FlipImageSize"].found && (_param["Alignment"]["FlipImageSize"].value1 == "true"))
  173. document.getElementById("flip").checked = true;
  174. document.getElementById("finerotate").disabled = true;
  175. document.getElementById("prerotateangle").disabled = true;
  176. document.getElementById("updatereferenceimage").disabled = true;
  177. document.getElementById("take").disabled = true;
  178. document.getElementById("MakeImage_Brightness_value1").disabled = true;
  179. document.getElementById("MakeImage_Saturation_value1").disabled = true;
  180. document.getElementById("MakeImage_Contrast_value1").disabled = true;
  181. document.getElementById("MakeImage_LEDIntensity_value1").disabled = true;
  182. document.getElementById("mirror").disabled = false;
  183. document.getElementById("flip").disabled = false;
  184. if (!(param["MakeImage"]["Brightness"].found))
  185. {
  186. document.getElementById("MakeImage_Brightness_value1").type = "hidden";
  187. document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
  188. }
  189. document.getElementById("mirror").disabled = true;
  190. document.getElementById("flip").disabled = true;
  191. isActReference = true;
  192. loadCanvas(url);
  193. drawRotated(false, true);
  194. }
  195. function dataURLtoBlob(dataurl) {
  196. var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  197. bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  198. while(n--){
  199. u8arr[n] = bstr.charCodeAt(n);
  200. }
  201. return new Blob([u8arr], {type:mime});
  202. }
  203. function SaveReference(){
  204. if (confirm("Are you sure you want to update the reference image?")) {
  205. param["Alignment"]["InitialRotate"].value1 = document.getElementById("prerotateangle").value;
  206. if ((param["Alignment"]["InitialMirror"].found == true) && (document.getElementById("mirror").checked))
  207. {
  208. param["Alignment"]["InitialMirror"].value1 = "true";
  209. param["Alignment"]["InitialMirror"]["found"] = true;
  210. param["Alignment"]["InitialMirror"]["enabled"] = true;
  211. }
  212. else
  213. param["Alignment"]["InitialMirror"].value1 = "false";
  214. if ((param["Alignment"]["FlipImageSize"].found == true) && (document.getElementById("flip").checked))
  215. param["Alignment"]["FlipImageSize"].value1 = "true";
  216. else
  217. param["Alignment"]["FlipImageSize"].value1 = "false";
  218. if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
  219. {
  220. ReadParameter(param, "MakeImage", "Brightness", false);
  221. ReadParameter(param, "MakeImage", "Contrast", false);
  222. ReadParameter(param, "MakeImage", "Saturation", false);
  223. ReadParameter(param, "MakeImage", "LEDIntensity", false);
  224. }
  225. var canvas = document.getElementById("canvas");
  226. drawRotated(false);
  227. WriteConfigININew();
  228. SaveConfigToServer(getDomainname());
  229. SaveCanvasToImage(canvas, "/config/reference.jpg", true, getDomainname());
  230. showReference(param);
  231. UpdatePage();
  232. firework.launch('Reference got updated. Please reboot to activate changes!', 'success', 5000);
  233. }
  234. }
  235. function loadCanvas(dataURL) {
  236. var canvas = document.getElementById('canvas');
  237. var context = canvas.getContext('2d');
  238. imageObj.onload = function() {
  239. canvas.width = this.width;
  240. canvas.height = this.height;
  241. drawRotated();
  242. };
  243. imageObj.src = dataURL;
  244. }
  245. function getCoords(elem) { // crossbrowser version
  246. var box = elem.getBoundingClientRect();
  247. var body = document.body;
  248. var docEl = document.documentElement;
  249. var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
  250. var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
  251. var clientTop = docEl.clientTop || body.clientTop || 0;
  252. var clientLeft = docEl.clientLeft || body.clientLeft || 0;
  253. var top = box.top + scrollTop - clientTop;
  254. var left = box.left + scrollLeft - clientLeft;
  255. return { top: Math.round(top), left: Math.round(left) };
  256. }
  257. function init() {
  258. canvas.addEventListener('mousemove', mouseMove, false);
  259. loadConfig(getDomainname());
  260. ParseConfig();
  261. param = getConfigParameters();
  262. param["MakeImage"]["LEDIntensity"]["enabled"] = true;
  263. param["MakeImage"]["Brightness"]["enabled"] = true;
  264. param["MakeImage"]["Contrast"]["enabled"] = true;
  265. param["MakeImage"]["Saturation"]["enabled"] = true;
  266. if (!param["MakeImage"]["LEDIntensity"]["found"])
  267. {
  268. param["MakeImage"]["LEDIntensity"]["found"] = true;
  269. param["MakeImage"]["LEDIntensity"]["value1"] = "50";
  270. }
  271. if (!param["MakeImage"]["Brightness"]["found"])
  272. {
  273. param["MakeImage"]["Brightness"]["found"] = true;
  274. param["MakeImage"]["Brightness"]["value1"] = "0";
  275. }
  276. if (!param["MakeImage"]["Contrast"]["found"])
  277. {
  278. param["MakeImage"]["Contrast"]["found"] = true;
  279. param["MakeImage"]["Contrast"]["value1"] = "0";
  280. }
  281. if (!param["MakeImage"]["Saturation"]["found"])
  282. {
  283. param["MakeImage"]["Saturation"]["found"] = true;
  284. param["MakeImage"]["Saturation"]["value1"] = "0";
  285. }
  286. UpdateInput();
  287. showReference(param);
  288. }
  289. function UpdateInput() {
  290. WriteParameter(param, category, "MakeImage", "Brightness", false);
  291. WriteParameter(param, category, "MakeImage", "Contrast", false);
  292. WriteParameter(param, category, "MakeImage", "Saturation", false);
  293. WriteParameter(param, category, "MakeImage", "LEDIntensity", false);
  294. }
  295. function ReadParameter(_param, _cat, _name, _optional, _select = false){
  296. if (_param[_cat][_name]["found"]){
  297. if (_optional) {
  298. _param[_cat][_name]["enabled"] = document.getElementById(_cat+"_"+_name+"_enabled").checked;
  299. }
  300. if (_select) {
  301. var sel = document.getElementById(_cat+"_"+_name+"_value1");
  302. _param[_cat][_name]["value1"] = sel.options[sel.selectedIndex].text;
  303. }
  304. else {
  305. for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
  306. _param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
  307. }
  308. }
  309. }
  310. }
  311. function WriteParameter(_param, _category, _cat, _name, _optional, _select = false, _anzpara = 1){
  312. if (_param[_cat][_name]["found"]){
  313. if (_optional) {
  314. document.getElementById(_cat+"_"+_name+"_enabled").checked = _param[_cat][_name]["enabled"];
  315. for (var j = 1; j <= _anzpara; ++j) {
  316. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_param[_cat][_name]["enabled"];
  317. }
  318. }
  319. document.getElementById(_cat+"_"+_name+"_text").style="color:black;"
  320. if (_select) {
  321. var textToFind = _param[_cat][_name]["value1"];
  322. var dd = document.getElementById(_cat+"_"+_name+"_value1");
  323. for (var i = 0; i < dd.options.length; i++) {
  324. if (dd.options[i].text.toLowerCase() === textToFind.toLowerCase()) {
  325. dd.selectedIndex = i;
  326. break;
  327. }
  328. }
  329. }
  330. else {
  331. for (var j = 1; j <= _anzpara; ++j) {
  332. document.getElementById(_cat+"_"+_name+"_value"+j).value = _param[_cat][_name]["value"+j];
  333. }
  334. }
  335. }
  336. else {
  337. if (_optional) {
  338. document.getElementById(_cat+"_"+_name+"_enabled").disabled = true;
  339. for (var j = 1; j <= _anzpara; ++j) {
  340. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = true;
  341. }
  342. }
  343. document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
  344. }
  345. }
  346. function drawRotated(_grid = true, _isreference = false){
  347. finerot= parseFloat(document.getElementById("finerotate").value);
  348. prerot = parseFloat(document.getElementById("prerotateangle").value);
  349. mirror = document.getElementById("mirror").checked;
  350. flip = document.getElementById("flip").checked;
  351. if (finerot == 1) {
  352. prerot+=1
  353. finerot = 0
  354. }
  355. if (finerot == -1) {
  356. prerot-=1
  357. finerot = 0
  358. }
  359. degrees = finerot + prerot;
  360. document.getElementById("finerotate").value = finerot;
  361. document.getElementById("prerotateangle").value = prerot;
  362. var canvas = document.getElementById('canvas');
  363. if (flip == 1)
  364. {
  365. canvas.width = imageObj.height;
  366. canvas.height = imageObj.width;
  367. }
  368. else
  369. {
  370. canvas.width = imageObj.width;
  371. canvas.height = imageObj.height;
  372. }
  373. var canvas = document.getElementById('canvas');
  374. var context = canvas.getContext('2d');
  375. context.clearRect(0,0,canvas.width,canvas.height);
  376. context.save();
  377. if (isActReference)
  378. {
  379. context.drawImage(imageObj,0,0);
  380. }
  381. else
  382. {
  383. context.translate(canvas.width/2,canvas.height/2);
  384. context.rotate(degrees*Math.PI/180);
  385. if (mirror) {
  386. context.scale(-1, 1);
  387. }
  388. context.drawImage(imageObj,-imageObj.width/2,-imageObj.height/2);
  389. }
  390. context.restore();
  391. if (_grid == true && !isActReference){
  392. drawGrid();
  393. }
  394. }
  395. function drawGrid(){
  396. var canvas = document.getElementById('canvas');
  397. var ctx = canvas.getContext('2d');
  398. w = canvas.width;
  399. h = canvas.height;
  400. ctx.save();
  401. ctx.strokeStyle = '#00FF00';
  402. for (i = h/2; i < h; i += 100)
  403. {
  404. ctx.moveTo(0, i);
  405. ctx.lineTo(w, i);
  406. ctx.stroke();
  407. ctx.moveTo(0, h-i);
  408. ctx.lineTo(w, h-i);
  409. ctx.stroke();
  410. }
  411. for (i = w/2; i < w; i += 100)
  412. {
  413. ctx.moveTo(i, 0);
  414. ctx.lineTo(i, h);
  415. ctx.stroke();
  416. ctx.moveTo(w-i, 0);
  417. ctx.lineTo(w-i, h);
  418. ctx.stroke(); }
  419. ctx.restore();
  420. }
  421. function mouseMove(e) {
  422. drawRotated();
  423. var canvas = document.getElementById('canvas');
  424. var context = canvas.getContext('2d');
  425. zw = getCoords(this);
  426. x = e.pageX - zw.left;
  427. y = e.pageY - zw.top;
  428. context.lineWidth = 2;
  429. context.strokeStyle = "#00FF00";
  430. context.beginPath();
  431. context.moveTo(0,y);
  432. context.lineTo(canvas.width, y);
  433. context.moveTo(x, 0);
  434. context.lineTo(x, canvas.height);
  435. context.stroke();
  436. }
  437. init();
  438. </script>
  439. </body>
  440. </html>