Nodejs:用nodejs在命令终端画由字符构成的图片

Nodejs:用nodejs在命令终端画由字符构成的图片

源码地址:https://github.com/switer/imaging

Source image:

source

Draw into terminal:

imaging

支持自定义字符:

imaging char

支持显示位置设置:

imaging left


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);
}

解释

  1. 创建Canvas对象:使用canvas库创建一个虚拟的画布。
  2. 加载图像:使用Image对象加载源图像。
  3. 获取像素数据:使用getImageData方法获取图像的像素数据。
  4. 定义字符集:定义一个字符数组,这些字符将用于表示不同的亮度级别。
  5. 遍历像素数据:遍历每个像素,计算其亮度值,并根据亮度值选择相应的字符。
  6. 使用Chalk设置颜色:使用chalk库将字符设置为相应的颜色。
  7. 输出到命令行:将每一行的字符打印到命令行。

通过上述步骤,你可以将任何图像转换为字符画并在命令行中显示。


棒,在终端显示的颜色是怎么弄的?

后续开发,支持字符选项,可以使用自定义字符渲染

已更新自定义字符串与图片位置选项

可以的 哈

可以的 哈

为了在命令终端使用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字符。
  • widthheight: 调整输出的宽度和高度,以适应你的终端窗口大小。
  • fs.writeFileSync: 将生成的ASCII字符串写入到文件中,也可以直接打印到控制台。

结果展示

运行上述脚本后,你会得到一个包含ASCII艺术的文本文件或者直接在终端上看到ASCII艺术图。

这样,你就可以在命令行中轻松地生成由字符组成的图片了。

回到顶部