当前位置: 首页 > backend >正文

字符画生成(伟大的CSDN)

自从来到了CSDN,便开始有了写博客的习惯,也是大家的关注,才让我意识到了知识产出的价值,我非常热爱这个平台,他让我感觉到了不同的文化信息的交流和碰撞,让我在工作和生活中无限进步。现在我开源我写的文字转字符代码,可以将文字转换为字符进行显示

我们先来看看效果

```js
-...-----.-...--/-..----...-....-/-.-./.../-../-./--------....--../-.-.-.-.--..-.-/-..-....------.-/--..-.-..--.--./-...--.-..---..-/--------....--../-.----..-------/-.-.-...-..-.-./-.--..-...--.-./-..---..-.-----/-.---....--...-/-.-------..--.-/-..---.-....--./--------....--../-...------.--.../-......----.-.-./-.-..-.-.-.-.../-.-----......../...-/../.--./--..-.--....---/----.-.---...../--------....--../--...-....-...-/--.--...-....-./-..----.--...../------.--.--..-/--...-....-...-/-.-----......../-..---.-....--./--------...-----/--....-------./-.--./-.......-...-./---.-.-..-/-.......-...-./--...../-.--.-/---/--...-.--.---../--...-.--.---../--------....--../-.-...--...--.-/-..---..-.-----/-..---.....--.-/-..----...--.-./--..--.----.-../--..-.--.--..../-..---........./----.----...---/-.-..--.-.--.-./-.--.---.-...-./-..---.-....--./--------....--../--...-....-...-/-.-..---.---.--/-.-..--.-.--.-./-.--.---.-...-./-.-.--.---.--.-/-..---.-....--./--------....--../-.-.-......--../-.-.-......--.-/-.---......----/-..----...--..-/-..----..--.-../-...-.---.--..../-.------..-.---
```
附上源码
```js
 function textToAscii(text) {
            // 创建一个canvas来绘制文字并获取像素数据
            const canvas = document.createElement('canvas');
            const ctx = canvas.getContext('2d');
            
            // 设置canvas大小(根据文字长度调整)
            const fontSize = 16;
            canvas.width = text.length * fontSize;
            canvas.height = fontSize * 2;
            
            // 绘制文字
            ctx.fillStyle = 'black';
            ctx.font = `${fontSize}px Arial`;
            ctx.fillText(text, 0, fontSize);
            
            // 获取像素数据
            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            const data = imageData.data;
            
            let asciiArt = '';
            
            // 遍历像素数据,转换为字符
            for (let y = 0; y < canvas.height; y += 2) { // 跳行以保持比例
                for (let x = 0; x < canvas.width; x += 1) {
                    const index = (y * canvas.width + x) * 4;
                    const r = data[index];
                    const g = data[index + 1];
                    const b = data[index + 2];
                    
                    // 计算亮度
                    const brightness = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
                    
                    // 根据亮度选择字符
                    const charIndex = Math.floor(brightness * (densityChars.length - 1));
                    asciiArt += densityChars[charIndex];
                }
                asciiArt += '\n';
            }
            
            return asciiArt;
        }

```

http://www.xdnf.cn/news/7726.html

相关文章:

  • windows安装WS,实测可行
  • 2.4.1死锁的概念
  • 中小型制造业信息化战略规划指南
  • SpringBoot 自动配置
  • 【课堂笔记】指数族与广义线性模型(GLMs)
  • zipkin+micrometer实现链路追踪
  • Java 01简单集合
  • Vue3——Pinia
  • 编译原理的部分概念
  • docker常用指令总结
  • A1-A2 英语学习系列 第四集 中国版
  • HarmonyOS5云服务技术分享--ArkTS开发Node环境
  • 不同消息队列保证高可用实现方案
  • C#入门系列【基础类型大冒险】从0到1,解锁编程世界的“元素周期表”
  • 50个Java+SpringBoot+Vue毕业设计选题(含技术栈+核心功能)
  • sqli-labs第十三关——’)POST报错注入
  • go.mod:5: unknown directive: toolchain
  • MySQL高频面试八连问(附场景化解析)
  • 解决方案:新建spring项目的时候出现java版本不匹配的问题
  • EtherCAT转CANopen网关:破解垃圾处理场工业通信难题
  • Redis中SETNX、Lua 脚本和 Redis事务的对比
  • 10.17 LangChain v0.3核心机制解析:从工具调用到生产级优化的实战全指南
  • 丝杆支撑座:机床生命周期的精度与效能
  • 【Python装饰器深度解析】从语法糖到元编程实战
  • 【iOS】类结构分析
  • Nginx详细配置说明
  • CSS-5.1 Transition 过渡
  • Dify 快速上手 MCP!Java 搭建 MCP Server 接入 Dify详细实战攻略
  • vue中列表filter方法的作用
  • 深入探讨redis:哨兵模式