Nodejs:用nodejs在命令终端画由字符构成的图片
Nodejs:用nodejs在命令终端画由字符构成的图片
源码地址:https://github.com/switer/imaging
Source image:
Draw into terminal:
支持自定义字符:
支持显示位置设置:
8 回复
Node.js:用Node.js在命令终端画由字符构成的图片
源码地址
https://github.com/switer/imaging
示例
假设我们有一个简单的源图像(如一个简单的ASCII艺术图片),我们希望使用Node.js将其转换为命令行中的字符画。
示例源图像
+------+
|Hello |
|World |
+------+
在命令终端中绘制字符画
我们可以使用canvas
库来处理图像,并使用chalk
库来控制颜色。以下是一个简单的示例:
首先,确保你已经安装了必要的依赖包:
npm install canvas chalk
然后,创建一个名为index.js
的文件并添加以下代码:
const { createCanvas, Image } = require('canvas');
const chalk = require('chalk');
// 创建一个canvas对象
const canvas = createCanvas(20, 10);
const ctx = canvas.getContext('2d');
// 加载源图像
const img = new Image();
img.src = 'path/to/source/image.png'; // 替换为你的源图像路径
ctx.drawImage(img, 0, 0);
// 获取像素数据
const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
// 定义字符集
const chars = [' ', '.', ':', '-', '=', '+', '*', '#', '%', '@'];
// 遍历像素数据
for (let y = 0; y < canvas.height; y++) {
let row = '';
for (let x = 0; x < canvas.width; x++) {
const index = (y * canvas.width + x) * 4;
const r = data[index];
const g = data[index + 1];
const b = data[index + 2];
const brightness = (r + g + b) / 3;
// 计算亮度并选择对应的字符
const charIndex = Math.floor((chars.length - 1) * brightness / 255);
const char = chars[charIndex];
// 使用chalk设置颜色
row += chalk.rgb(r, g, b)(char);
}
console.log(row);
}
解释
- 创建Canvas对象:使用
canvas
库创建一个虚拟的画布。 - 加载图像:使用
Image
对象加载源图像。 - 获取像素数据:使用
getImageData
方法获取图像的像素数据。 - 定义字符集:定义一个字符数组,这些字符将用于表示不同的亮度级别。
- 遍历像素数据:遍历每个像素,计算其亮度值,并根据亮度值选择相应的字符。
- 使用Chalk设置颜色:使用
chalk
库将字符设置为相应的颜色。 - 输出到命令行:将每一行的字符打印到命令行。
通过上述步骤,你可以将任何图像转换为字符画并在命令行中显示。
棒,在终端显示的颜色是怎么弄的?
后续开发,支持字符选项,可以使用自定义字符渲染
已更新自定义字符串与图片位置选项
可以的 哈
可以的 哈
为了在命令终端使用Node.js绘制由字符构成的图片,我们可以利用一些现有的库,例如node-image-to-ascii
,它能够将图像转换为ASCII艺术。下面是具体的步骤和示例代码。
示例代码
首先,你需要安装node-image-to-ascii
库:
npm install node-image-to-ascii
然后,你可以编写一个简单的脚本来读取图像并将其转换为ASCII艺术:
const fs = require('fs');
const imageToAscii = require('image-to-ascii');
// 定义输入和输出路径
const inputPath = 'path/to/your/image.png';
const outputPath = 'output.txt';
// 将图像转换为ASCII艺术
imageToAscii({
filename: inputPath,
colored: true, // 设置是否彩色
width: 100, // 设置宽度
height: 100, // 设置高度
}, (err, converted) => {
if (err) {
console.error(err);
return;
}
// 将结果写入文件或直接输出到控制台
fs.writeFileSync(outputPath, converted);
console.log(converted);
});
解释
imageToAscii
: 这个函数将图像文件(如PNG或JPG)转换为ASCII字符串。filename
: 输入图像文件的路径。colored
: 如果设置为true
,则输出的颜色ASCII字符;如果设置为false
,则输出黑白ASCII字符。width
和height
: 调整输出的宽度和高度,以适应你的终端窗口大小。fs.writeFileSync
: 将生成的ASCII字符串写入到文件中,也可以直接打印到控制台。
结果展示
运行上述脚本后,你会得到一个包含ASCII艺术的文本文件或者直接在终端上看到ASCII艺术图。
这样,你就可以在命令行中轻松地生成由字符组成的图片了。