imgtotext
Version:
ImgToText is a concise library that converts any image/video into customizable text!
2 lines • 3.37 kB
JavaScript
#!/usr/bin/env node
import{mkdirSync,copyFileSync,writeFileSync}from"fs";import{join,dirname}from"path";import{fileURLToPath}from"url";import{createInterface}from"readline";import{exec}from"child_process";const destination=join(process.cwd(),process.argv[2]||""),libPath=join(dirname(fileURLToPath(import.meta.url)),"../imgToText.min.js");try{mkdirSync(destination,{recursive:!0})}catch{}copyFileSync(libPath,join(destination,"imgToText.min.js")),writeFileSync(join(destination,"index.html"),'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>Template</title>\n <link rel="stylesheet" href="index.css">\n</head>\n<body>\n\n <div id="generatedText" autocomplete="off" spellcheck="false"></div>\n\n <div class="settings">\n <label>Use colors:<input id="useColors" type="checkbox"></input></label>\n <button id="copyResult">Copy Text Result</button>\n <button id="inputCamera">Camera</button>\n <input type="file" id="mediaInput">\n </div>\n\n <script src="imgToText.min.js"><\/script>\n <script src="index.js" async><\/script>\n</body>\n</html>'),writeFileSync(join(destination,"index.css"),"html, body {\n background-color: black;\n overflow: overlay;\n color: aliceblue;\n margin: 0;\n font-size: 16px;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n#generatedText {\n height: 95%;\n width: 100%;\n background-color: transparent;\n color: aliceblue;\n outline: none;\n border: none;\n font-family: monospace;\n font-size: 16px;\n letter-spacing: 0px;\n line-height: 18px;\n white-space: pre;\n}\n\n.settings {\n position: fixed;\n bottom: 3vh;\n}"),writeFileSync(join(destination,"index.js"),'const {ImageToTextConverter} = window.ImgToText, \n {ImageDisplay} = window.CDE\n\n// Warning message\nif (location.origin.startsWith("http:")) console.warn("Make sure that this page is hosted on a trusted source (https:// or file://) for the camera and text copy to work!")\n\n// ImageToTextConverter instance\nconst converter = new ImageToTextConverter((text)=>{generatedText.innerHTML = text}, null, 3, [" ",".",":","-","~","=","+","o","O","X","H","M"])\n\n// Some default text\nconverter.createBigText("Img\\nTo\\nText :D", "32px monospace", [2, 1.25], "aqua")\n\n// Custom file input\nconverter.createHTMLFileInput(mediaInput)\n\n// Camera capture input\ninputCamera.onclick=()=>{\n converter.loadMedia(ImageDisplay.loadCamera())\n mediaInput.value = ""\n}\n\nuseColors.oninput=(e)=>{\n converter.useColors = e.target.checked\n converter.generate()\n}\n\n// Copy text result\ncopyResult.onclick=()=>{\n if (navigator.clipboard) navigator.clipboard.writeText(generatedText.innerHTML.trimEnd())\n}'),console.log("Browser project template successfully created at '"+destination+"'!\n");const cli=createInterface({input:process.stdin,output:process.stdout});function close(e){e.close(),console.log("")}cli.question("Open in explorer [Y/N]? ",e=>{const n=e?.toLowerCase()?.trim();"code"==n?exec("code --new-window "+destination):n&&!["y","yes","ye","ok"].includes(n)||exec("explorer "+destination),close(cli)}),process.stdin.on("keypress",(e,n)=>{"escape"==n.name&&close(cli)});