readconfig.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. function readconfig_Version(){
  2. return "1.0.0 - 20200910";
  3. }
  4. var config_gesamt;
  5. var config_split;
  6. var ref = new Array(2);
  7. var digit = new Array(0);
  8. var analog = new Array(0);
  9. var initalrotate = new Object();
  10. function MakeRefZW(zw, _basepath){
  11. url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
  12. var xhttp = new XMLHttpRequest();
  13. try {
  14. xhttp.open("GET", url, false);
  15. xhttp.send(); }
  16. catch (error)
  17. {
  18. // alert("Deleting Config.ini failed");
  19. }
  20. FileCopyOnServer("/img_tmp/ref_zw_org.jpg", "/img_tmp/ref_zw.jpg", _basepath);
  21. }
  22. function GetCoordinates(index, _basepath){
  23. FileCopyOnServer(ref[index]["name"], "/img_tmp/ref_zw.jpg", _basepath);
  24. FileDeleteOnServer("/img_tmp/ref_zw_org.jpg", _basepath);
  25. var namezw = ref[index]["name"].replace(".jpg", "_org.jpg");
  26. FileCopyOnServer(namezw, "/img_tmp/ref_zw_org.jpg", _basepath);
  27. return ref[index];
  28. }
  29. function ParseConfigAlignment(_aktline){
  30. var akt_ref = 0;
  31. ++_aktline;
  32. while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
  33. var linesplit = ZerlegeZeile(config_split[_aktline]);
  34. if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1))
  35. {
  36. initalrotate["mirror"] = linesplit[1].toUpperCase().localeCompare("TRUE") == 0;
  37. initalrotate["pos_config_mirror"] = _aktline;
  38. }
  39. if (((linesplit[0].toUpperCase() == "INITALROTATE") || (linesplit[0].toUpperCase() == "INITIALROTATE")) && (linesplit.length > 1))
  40. {
  41. initalrotate["angle"] = parseInt(linesplit[1]);
  42. initalrotate["pos_config"] = _aktline;
  43. }
  44. if (linesplit.length == 3)
  45. {
  46. ref[akt_ref] = new Object();
  47. ref[akt_ref]["pos_ref"] = _aktline;
  48. ref[akt_ref]["name"] = linesplit[0];
  49. ref[akt_ref]["x"] = linesplit[1];
  50. ref[akt_ref]["y"] = linesplit[2];
  51. akt_ref++;
  52. }
  53. ++_aktline;
  54. }
  55. return _aktline;
  56. }
  57. function ParseConfigDigit(_aktline){
  58. ++_aktline;
  59. digit.length = 0;
  60. while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
  61. var linesplit = ZerlegeZeile(config_split[_aktline]);
  62. if (linesplit.length >= 5)
  63. {
  64. zw = new Object();
  65. zw["pos_ref"] = _aktline;
  66. zw["name"] = linesplit[0];
  67. zw["x"] = linesplit[1];
  68. zw["y"] = linesplit[2];
  69. zw["dx"] = linesplit[3];
  70. zw["dy"] = linesplit[4];
  71. zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]);
  72. digit.push(zw);
  73. }
  74. ++_aktline;
  75. }
  76. return _aktline;
  77. }
  78. function ParseConfigAnalog(_aktline){
  79. ++_aktline;
  80. analog.length = 0;
  81. while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
  82. var linesplit = ZerlegeZeile(config_split[_aktline]);
  83. if (linesplit.length >= 5)
  84. {
  85. zw = new Object();
  86. zw["pos_ref"] = _aktline;
  87. zw["name"] = linesplit[0];
  88. zw["x"] = linesplit[1];
  89. zw["y"] = linesplit[2];
  90. zw["dx"] = linesplit[3];
  91. zw["dy"] = linesplit[4];
  92. zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]);
  93. analog.push(zw);
  94. }
  95. ++_aktline;
  96. }
  97. return _aktline;
  98. }
  99. function getROIInfo(_typeROI){
  100. if (_typeROI == "[Digits]"){
  101. targetROI = digit;
  102. }
  103. if (_typeROI == "[Analog]"){
  104. targetROI = analog;
  105. }
  106. return targetROI.slice(); // Kopie senden, nicht orginal!!!
  107. }
  108. function SaveROIToConfig(_ROIInfo, _typeROI, _basepath){
  109. if (_typeROI == "[Digits]"){
  110. targetROI = digit;
  111. }
  112. if (_typeROI == "[Analog]"){
  113. targetROI = analog;
  114. }
  115. // Abstimmen Anzahl ROIs:
  116. var _pos = targetROI[targetROI.length-1]["pos_ref"];
  117. for (var i = targetROI.length; i < _ROIInfo.length; ++i){
  118. var zw = config_split[config_split.length-1];
  119. config_split.push(zw);
  120. for (var j = config_split.length-2; j > _pos + 1; --j){
  121. config_split[j] = config_split[j-1];
  122. }
  123. }
  124. for (i = targetROI.length-1; i > _ROIInfo.length-1; --i){
  125. var _zwpos = targetROI[i]["pos_ref"];
  126. config_split.splice(_zwpos, 1);
  127. }
  128. var linewrite = 0;
  129. for (i = 0; i < _ROIInfo.length; ++i){
  130. if (i < targetROI.length){
  131. linewrite = targetROI[i]["pos_ref"];
  132. }
  133. else {
  134. linewrite++;
  135. }
  136. config_split[linewrite] = _ROIInfo[i]["name"] + ", " + _ROIInfo[i]["x"] + ", " + _ROIInfo[i]["y"] + ", " + _ROIInfo[i]["dx"] + ", " + _ROIInfo[i]["dy"];
  137. }
  138. SaveConfigToServer(_basepath);
  139. }
  140. function ParseConfig() {
  141. config_split = config_gesamt.split("\n");
  142. var aktline = 0;
  143. while (aktline < config_split.length){
  144. if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
  145. aktline = ParseConfigAlignment(aktline);
  146. continue;
  147. }
  148. if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
  149. aktline = ParseConfigDigit(aktline);
  150. continue;
  151. }
  152. if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
  153. aktline = ParseConfigAnalog(aktline);
  154. continue;
  155. }
  156. aktline++;
  157. }
  158. }
  159. function getPreRotate(){
  160. return initalrotate["angle"];
  161. }
  162. function setPreRotate(_prerotate){
  163. initalrotate["angle"] = _prerotate;
  164. }
  165. function getMirror(){
  166. if (initalrotate.hasOwnProperty("mirror")) {
  167. return initalrotate["mirror"];
  168. }
  169. return false;
  170. }
  171. function setMirror(_mirror){
  172. initalrotate["mirror"] = _mirror;
  173. }
  174. function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){
  175. var JPEG_QUALITY=0.8;
  176. var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY);
  177. var rtn = dataURLtoBlob(dataUrl);
  178. if (_delete) {
  179. FileDeleteOnServer(_filename, _basepath);
  180. }
  181. FileSendContent(rtn, _filename, _basepath);
  182. }
  183. function SaveConfigToServer(_basepath){
  184. // leere Zeilen am Ende löschen
  185. var zw = config_split.length - 1;
  186. while (config_split[zw] == "") {
  187. config_split.pop();
  188. }
  189. var config_gesamt = "";
  190. for (var i = 0; i < config_split.length; ++i)
  191. {
  192. config_gesamt = config_gesamt + config_split[i] + "\n";
  193. }
  194. FileDeleteOnServer("/config/config.ini", _basepath);
  195. FileSendContent(config_gesamt, "/config/config.ini", _basepath);
  196. }
  197. function UpdateConfigFileReferenceChange(_basepath){
  198. for (var _index = 0; _index < ref.length; ++_index){
  199. var zeile = ref[_index]["name"] + " " + ref[_index]["x"] + ", " + ref[_index]["y"];
  200. var _pos = ref[_index]["pos_ref"];
  201. config_split[_pos] = zeile;
  202. }
  203. zeile = "InitialRotate = " + initalrotate["angle"];
  204. var _pos = initalrotate["pos_config"];
  205. config_split[_pos] = zeile;
  206. var mirror = false;
  207. if (initalrotate.hasOwnProperty("mirror")) {
  208. mirror = initalrotate["mirror"];
  209. }
  210. var mirror_pos = -1;
  211. if (initalrotate.hasOwnProperty("pos_config_mirror")) {
  212. mirror_pos = initalrotate["pos_config_mirror"];
  213. }
  214. if (mirror_pos > -1) {
  215. if (mirror) {
  216. config_split[mirror_pos] = "InitialMirror = True";
  217. }
  218. else {
  219. config_split[mirror_pos] = "InitialMirror = False";
  220. }
  221. }
  222. else {
  223. if (mirror) { // neue Zeile muss an der richtigen Stelle eingefügt werden - hier direct nach [Alignment]
  224. var aktline = 0;
  225. while (aktline < config_split.length){
  226. if (config_split[aktline].trim() == "[Alignment]") {
  227. break;
  228. }
  229. aktline++
  230. }
  231. // fuege neue Zeile in config_split ein
  232. var zw = config_split[config_split.length-1];
  233. config_split.push(zw);
  234. for (var j = config_split.length-2; j > aktline + 1; --j){
  235. config_split[j] = config_split[j-1];
  236. }
  237. config_split[aktline + 1] = "InitialMirror = True"
  238. }
  239. }
  240. SaveConfigToServer(_basepath);
  241. }
  242. function UpdateConfig(zw, _index, _enhance, _basepath){
  243. var zeile = zw["name"] + " " + zw["x"] + ", " + zw["y"];
  244. var _pos = ref[_index]["pos_ref"];
  245. config_split[_pos] = zeile;
  246. SaveConfigToServer(_basepath);
  247. var namezw = zw["name"];
  248. FileCopyOnServer("/img_tmp/ref_zw.jpg", namezw, _basepath);
  249. var namezw = zw["name"].replace(".jpg", "_org.jpg");
  250. FileCopyOnServer("/img_tmp/ref_zw_org.jpg", namezw, _basepath);
  251. }
  252. function MakeContrastImageZW(zw, _enhance, _basepath){
  253. url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw.jpg" + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
  254. if (_enhance == true){
  255. url = url + "&enhance=true";
  256. }
  257. var xhttp = new XMLHttpRequest();
  258. try {
  259. xhttp.open("GET", url, false);
  260. xhttp.send(); }
  261. catch (error)
  262. {
  263. // alert("Deleting Config.ini failed");
  264. }
  265. }
  266. function createReader(file) {
  267. var image = new Image();
  268. reader.onload = function(evt) {
  269. var image = new Image();
  270. image.onload = function(evt) {
  271. var width = this.width;
  272. var height = this.height;
  273. alert (width); // will produce something like 198
  274. };
  275. image.src = evt.target.result;
  276. };
  277. reader.readAsDataURL(file);
  278. }
  279. function GetReferenceSize(name){
  280. img = new Image();
  281. var xhttp = new XMLHttpRequest();
  282. url = "http://192.168.178.22/fileserver" + name;
  283. xhttp.open("GET", url, false);
  284. xhttp.send();
  285. var response = xhttp.responseText;
  286. var binary = ""
  287. for (var responseText = xhttp.responseText, responseTextLen = responseText.length, binary = "", i = 0; i < responseTextLen; ++i) {
  288. binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
  289. }
  290. img.src = 'data:image/jpeg;base64,'+ window.btoa(binary);
  291. return [img.width, img.height];
  292. }
  293. function ZerlegeZeile(input)
  294. {
  295. var Output = Array(0);
  296. delimiter = " =,";
  297. input = trim(input, delimiter);
  298. var pos = findDelimiterPos(input, delimiter);
  299. var token;
  300. while (pos > -1) {
  301. token = input.substr(0, pos);
  302. token = trim(token, delimiter);
  303. Output.push(token);
  304. input = input.substr(pos+1, input.length);
  305. input = trim(input, delimiter);
  306. pos = findDelimiterPos(input, delimiter);
  307. }
  308. Output.push(input);
  309. return Output;
  310. }
  311. function findDelimiterPos(input, delimiter)
  312. {
  313. var pos = -1;
  314. var zw;
  315. var akt_del;
  316. for (var anz = 0; anz < delimiter.length; ++anz)
  317. {
  318. akt_del = delimiter[anz];
  319. zw = input.indexOf(akt_del);
  320. if (zw > -1)
  321. {
  322. if (pos > -1)
  323. {
  324. if (zw < pos)
  325. pos = zw;
  326. }
  327. else
  328. pos = zw;
  329. }
  330. }
  331. return pos;
  332. }
  333. function trim(istring, adddelimiter)
  334. {
  335. while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
  336. istring = istring.substr(1, istring.length-1);
  337. }
  338. while ((istring.length > 0) && (adddelimiter.indexOf(istring[istring.length-1]) >= 0)){
  339. istring = istring.substr(0, istring.length-1);
  340. }
  341. return istring;
  342. }
  343. function loadConfig(_basepath) {
  344. var xhttp = new XMLHttpRequest();
  345. try {
  346. url = _basepath + '/fileserver/config/config.ini';
  347. xhttp.open("GET", url, false);
  348. xhttp.send();
  349. config_gesamt = xhttp.responseText;
  350. }
  351. catch (error)
  352. {
  353. // alert("Deleting Config.ini failed");
  354. }
  355. }
  356. function getConfig() {
  357. return config_gesamt;
  358. }
  359. function dataURLtoBlob(dataurl) {
  360. var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  361. bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  362. while(n--){
  363. u8arr[n] = bstr.charCodeAt(n);
  364. }
  365. return new Blob([u8arr], {type:mime});
  366. }
  367. function FileCopyOnServer(_source, _target, _basepath = ""){
  368. url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
  369. var xhttp = new XMLHttpRequest();
  370. try {
  371. xhttp.open("GET", url, false);
  372. xhttp.send(); }
  373. catch (error)
  374. {
  375. // alert("Deleting Config.ini failed");
  376. }
  377. }
  378. function FileDeleteOnServer(_filename, _basepath = ""){
  379. var xhttp = new XMLHttpRequest();
  380. var okay = false;
  381. xhttp.onreadystatechange = function() {
  382. if (xhttp.readyState == 4) {
  383. if (xhttp.status == 200) {
  384. okay = true;
  385. } else if (xhttp.status == 0) {
  386. // alert("Server closed the connection on delete abruptly!");
  387. // location.reload()
  388. } else {
  389. // alert(xhttp.status + " Error!\n" + xhttp.responseText);
  390. // location.reload()
  391. }
  392. }
  393. };
  394. try {
  395. var url = _basepath + "/delete" + _filename;
  396. xhttp.open("POST", url, false);
  397. xhttp.send();
  398. }
  399. catch (error)
  400. {
  401. // alert("Deleting Config.ini failed");
  402. }
  403. return okay;
  404. }
  405. function FileSendContent(_content, _filename, _basepath = ""){
  406. var xhttp = new XMLHttpRequest();
  407. var okay = false;
  408. xhttp.onreadystatechange = function() {
  409. if (xhttp.readyState == 4) {
  410. if (xhttp.status == 200) {
  411. okay = true;
  412. } else if (xhttp.status == 0) {
  413. alert("Server closed the connection abruptly!");
  414. } else {
  415. alert(xhttp.status + " Error!\n" + xhttp.responseText);
  416. }
  417. }
  418. };
  419. try {
  420. upload_path = _basepath + "/upload" + _filename;
  421. xhttp.open("POST", upload_path, false);
  422. xhttp.send(_content);
  423. }
  424. catch (error)
  425. {
  426. // alert("Deleting Config.ini failed");
  427. }
  428. return okay;
  429. }
  430. function SaveReferenceImage(_id_canvas, _filename, _doDelete, _basepath = ""){
  431. if (_doDelete){
  432. FileDeleteOnServer(_filename, _basepath);
  433. }
  434. var canvas = document.getElementById(_id_canvas);
  435. var JPEG_QUALITY=0.8;
  436. var dataUrl = canvas.toDataURL('image/jpeg', JPEG_QUALITY);
  437. var rtn = dataURLtoBlob(dataUrl);
  438. if (!FileSendContent(rtn, _filename, _basepath)){
  439. alert("Error on saving reference image (" + _filename + ")!\nPlease retry.");
  440. location.reload();
  441. };
  442. }