imageOcr.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { getInputDir, getOutputDir, makeDirSync } from "./env";
  2. const fs = require("fs");
  3. const path = require("path");
  4. /**
  5. * 旋转图片,并保存为正式文件
  6. * @param {*} scaningImageList 图片路径
  7. * @param {String} paperInfo 保持文件名称
  8. */
  9. export function saveOutputImage(scaningImageList, paperInfo) {
  10. let outputOriginPaths = [];
  11. for (let i = 0; i < scaningImageList.length; i++) {
  12. const imagePath = scaningImageList[i];
  13. const originImageFile = saveOriginImage(imagePath, paperInfo);
  14. outputOriginPaths.push(originImageFile);
  15. fs.unlinkSync(imagePath);
  16. }
  17. return outputOriginPaths;
  18. }
  19. function saveOriginImage(imagePath, paperInfo) {
  20. const outputDir = path.join(getOutputDir("origin"), paperInfo.taskId + "");
  21. if (!fs.existsSync(outputDir)) makeDirSync(outputDir);
  22. const outputOriginPath = path.join(outputDir, path.basename(imagePath));
  23. fs.copyFileSync(imagePath, outputOriginPath);
  24. return outputOriginPath;
  25. }
  26. /**
  27. * 获取最早添加的文件
  28. * @param {String} dir 图片目录
  29. */
  30. export function getEarliestFile(dir) {
  31. const ddir = dir || getInputDir();
  32. const files = fs
  33. .readdirSync(ddir)
  34. .filter(fileName => fileName.toLowerCase().match(/\.(jpg|png|jpeg)/))
  35. .map(fileName => {
  36. return {
  37. name: fileName,
  38. time: fs.statSync(path.join(ddir, fileName)).birthtimeMs
  39. };
  40. })
  41. .sort((a, b) => a.time - b.time);
  42. if (!files.length) return { url: "", name: "" };
  43. return {
  44. url: path.join(ddir, files[0].name),
  45. name: files[0].name
  46. };
  47. }
  48. export function getPreUploadFilesAutoSerial(dir) {
  49. const ddir = dir || getInputDir();
  50. const files = fs
  51. .readdirSync(ddir)
  52. .filter(fileName => fileName.toLowerCase().match(/\.(jpg|png|jpeg)/));
  53. let imageList = [];
  54. const len = Math.ceil(files.length / 2);
  55. for (let i = 0; i < len; i++) {
  56. const frontFile = files[i];
  57. const versoFile = files[i + 1];
  58. imageList.push({
  59. frontFile,
  60. versoFile
  61. });
  62. }
  63. return imageList;
  64. }
  65. export function getPreUploadFileCount(dir) {
  66. const ddir = dir || getInputDir();
  67. const files = fs
  68. .readdirSync(ddir)
  69. .filter(fileName => fileName.toLowerCase().match(/\.(jpg|png|jpeg)/));
  70. return Math.ceil(files.length / 2);
  71. }
  72. export function getPreUploadFiles(dir) {
  73. const ddir = dir || getInputDir();
  74. const files = fs
  75. .readdirSync(ddir)
  76. .filter(fileName => fileName.toLowerCase().match(/\.(json)/));
  77. let imageList = [];
  78. if (!files.length) return { succeed: false, errorMsg: "当前无扫描文件!" };
  79. const fileCont = fs.readFileSync(path.join(dir, files[0]));
  80. const fileInfo = JSON.parse(fileCont);
  81. if (!fileInfo.succeed) {
  82. return { succeed: false, errorMsg: fileInfo.errorMsg };
  83. }
  84. imageList = fileInfo.images.map(item => {
  85. return {
  86. frontFile: item.front,
  87. versoFile: item.back
  88. };
  89. });
  90. if (!imageList.length)
  91. return { succeed: false, errorMsg: "当前无扫描文件!" };
  92. return { succeed: true, data: imageList };
  93. }
  94. /**
  95. 扫描仪返回的数据
  96. {
  97. "images": [
  98. {
  99. "duplex": true,
  100. "front": "D:/workspace/project/scan-library/test/00000001_F.jpg",
  101. "back":"D:/workspace/project/scan-library/test/00000001_B.jpg"
  102. },
  103. {
  104. "duplex": true,
  105. "front": "D:/workspace/project/scan-library/test/00000001_B.jpg",
  106. "back":"D:/workspace/project/scan-library/test/00000001_B.jpg"
  107. }
  108. ],
  109. "succeed": true,
  110. "errorMsg":"请将试卷放置到扫描仪上,再进行扫描!"
  111. }
  112. */