把一张穿孔卡做成可导出的 SVG

发布时间:2026/10/25 20:35:06

把一张穿孔卡做成可导出的 SVG 复古界面最容易做出“像真的”也最容易顺手写下“仿真”。一张浅黄色卡片配上等距孔位就有了老机器的气息但它并没有因此成为历史设备的编码器。这个小工具只做一件事把一段短 ASCII 文本转换为八位二进制再画成 SVG 孔位。每个字符占一行最高位在左1 画深色孔0 画浅色格。这里采用的是为了阅读而设计的八列排布不是 Hollerith 卡片的列码也不承诺能被任何实体读卡器识别。先约定编码再画纸张例如H的码值是 72对应01001000。如果只从第二、第五格打孔读者就能手工检查这一行。中文字符则不在本例的范围内不要悄悄取 UTF-16 低八位那会产生可画却不可解释的结果。SVG 可以把几何与导出内容放在同一份文本里。SVG 2 的路径规范明确区分位置、线段和曲线命令这个卡片甚至用不到复杂路径圆角矩形就足够。图形简单错误也更容易看见。下面代码在 Node.js 中直接运行会生成一份card.svg。标签经过 XML 转义输入限制为最多 24 个可打印 ASCII 字符。导出的是矢量文档尺寸可以缩放字体外观仍取决于打开它的环境。若做浏览器下载需要额外处理 Blob URL 的释放和用户触发不是把文件扩展名改成 SVG 就算完成。复古质感别抢走信息纸边噪点、折痕和编号可以后加但不能覆盖孔位。可访问版本还应保留原文本和二进制字符串让不方便读图的人也能拿到同样的信息。例子在desc中放入了原文并在每行右侧写出位串。本地检查验证了H的位串、孔数量、XML 特殊字符转义和非 ASCII 拒绝没有对实体打印、读卡器、浏览器字体做兼容测试。它适合做一张程序员节纪念卡。只要把装饰规则说清楚玩具也可以很认真。可独立运行的核心例子const fs require(node:fs); const xml s s.replace(/[]/g, c ({:amp;,:lt;,:gt;,:quot;,:apos;}[c])); function bits(text) { if (!text.length || text.length24 || /[^\x20-\x7E]/.test(text)) throw Error(只接受1到24个可打印ASCII字符); return [...text].map(c c.charCodeAt(0).toString(2).padStart(8,0)); } function card(text) { const rowsbits(text), h80rows.length*28; const cellsrows.flatMap((row,y) [...row].map((b,x) rect x${28x*22} y${48y*28} width14 height18 rx3 fill${b1?#453f4d:#e3d7c4}/)); const labelsrows.map((row,y) text x220 y${62y*28} font-size12${row}/text); return svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 340 ${h} descASCII八位装饰卡${xml(text)}/desc rect width340 height${h} rx12 fill#f6ead6/ text x28 y28DECORATIVE ASCII CARD/text ${cells.join()}${labels.join()}/svg; } if(bits(H)[0]!01001000) throw Error(编码错误); if((bits(H)[0].match(/1/g)||[]).length!2) throw Error(孔数错误); if(!card().includes(lt;amp;)) throw Error(转义错误); let rejectedfalse;try{bits(秋);}catch{rejectedtrue;} if(!rejected) throw Error(非ASCII不应静默截断); fs.writeFileSync(card.svg,card(HELLO 1024)); console.log(已生成 card.svg装饰编码不用于实体检票或读卡);
延伸阅读

更多相关文章

2026/10/25 20:35:06

ASCII 图像先校正字符比例

把照片变成字符画,最直观的办法是把灰度映射到一串字符。可第一次做出来,圆形常常变成长椭圆:问题未必在灰度公式,而在字符本身不是正方形。 等宽字体只保证字符之间等宽,不保证一个字格的宽和高相等。假设实测字格宽…

2026/10/25 20:35:06

给代码写诗助手一份能验收的任务单

“帮我做得更有秋天的感觉”,可以开启讨论,却很难结束一次交付。模型不知道要保留哪些素材,也不知道“更好看”到底对应什么检查。最后常常得到一份流畅提案,和一堆没人敢覆盖的文件。 我给轻量创作工具设计任务单时,…

2026/10/25 20:30:06

MLOps工具链协同实战:Neptune、MLflow、WhyLabs与Arize集成指南

1. 项目概述:为什么一篇“翻译稿”值得单独成文?NeptuneAI 博客中文翻译(六十八)——光看标题,你可能觉得这不过是一次常规的文档搬运。但如果你在 MLOps 工程一线待过半年以上,就会明白:这类翻…

2026/10/25 21:55:38

Linux实时调度延迟实战:从cyclictest测量到CPU隔离调优

1. 什么是“调度延迟初体验”:一个嵌入式与实时系统工程师的真实入门现场“调度延迟初体验”这六个字,乍看像极了某本Linux内核书的课后习题,或者新同事在晨会上支吾着汇报的模糊感受。但在我带过的二十多个嵌入式项目里,它从来不…

2026/10/25 21:55:38

SpringBoot资产管理系统功能介绍

商品编号:000042【一、项目简介】 围绕企事业单位固定资产管理构建业务流程,涵盖资产登记、分类、领用审批、盘点、维保及统计分析。提供账号登录、角色信息和资产状态、部门分布等概览。维护资产编码、名称、规格型号、品牌、所属部门及采购金额&#x…

2026/10/25 21:55:38

用Wind Python接口从零构建Fama-French三因子五因子模型

简介:这是一份围绕Fama-French三因子与五因子模型的Python实现资料包,面向金融量化初学者、金融专业学生以及需要做因子分析的从业者。压缩包共121个文件、约11.98MB,以101个py脚本为主,辅以csv因子数据表、txt说明、pyc编译文件、…

2026/10/25 21:55:38

SpringBoot微信小程序校园闲置书籍交换系统功能介绍

商品编号:000041【一、项目简介】 面向校园闲置书籍流通的微信小程序系统,配套网页管理后台。学生可浏览推荐书籍、分类搜索、发布书籍、查看详情并管理个人书籍、交换和订单;管理员可开展图书、审核、公告与统计管理。提供学号密码登录、注册…

2026/10/25 21:50:37

无Tool Calling的结构化Agent:用Schema约束LLM输出

1. 这个“无 Tool Calling”的Agent,到底在对抗什么?你有没有试过这样写一个Agent:给它一段用户问题,让它调用天气API、查数据库、发邮件、读文件……然后发现代码越写越厚,错误日志越堆越多,调试时要同时盯…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑