你知道吗?“何同学”视频《我用 36 万行备忘录做了个动画…》中的图片转ASCII,node 也可以实现哦

3,190 阅读3分钟

背景

近日,拥有 1200 万粉丝的博主 “老师好我叫何同学” 因在视频《我用 36 万行备忘录做了个动画…》中被质疑抄袭,让我看到的了ASCII-generator这个好玩儿的开源项目,那个项目是python写的,转念一想,node版本有吗?

一番查找之下(其实就是搜了下....)发现,还! 真!有!

揭秘

asciify-image 是一个开源的 Node.js 库,用于将图像转换为 ASCII 艺术字符。

准备工作(老配方,先准备)

让我们先新建一个demo目录,文件结构如下

demo
├── package.json # 项目配置文件
└── index.js # 入口文件

安装

首先,要确保你的电脑已经安装了 Node.js 和 npm ,安装好后,打开命令行工具,输入以下命令就可以安装 asciify-image

npm install asciify-image

基本使用

在安装完成后,就可以在你的 Node.js 项目中使用它了。以下是一个简单的示例代码:

// index.js
var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 30,
    height: 30,
    color: true,
}
// 先加载一个本地文件
asciify("./test.jpeg", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

原始图片

test.jpeg

效果

color.png

呦,这效果还不赖错哦~

进阶应用

设置重置大小的方式(fit)

fit: string

可选值为:

  • box - 调整图像大小,使其适合由指定宽度和高度定义的边界框。保持纵横比。
  • width - 通过将宽度缩放到指定宽度来调整图像大小。保持纵横比。
  • height - 通过将高度缩放到指定高度来调整图像大小。保持纵横比。
  • original - 不调整图像大小。
  • none - 将宽度和高度缩放到指定值,忽略原始纵横比。
var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 30,
    height: 30,
    color: false,
}
asciify("./test.jpeg", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

效果

color.png

设置是否启用颜色(color)

color: boolean (是否启用颜色,默认为 true)

var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 30,
    height: 30,
    color: false,
}
asciify("./test.jpeg", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

效果

no-color.png

调整输出大小:可以通过设置选项来调整输出的大小和质量,示例代码如下:

// index.js
var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 15,// 从文档看是终端窗口的百分比
    height: 15,// 从文档看是终端窗口的百分比
}
asciify("./test.jpeg", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

效果

上面的是 15的下面的是 30

15vs30.png

调整返回值格式

format: "string" | "array"

默认为 string,当format设置为'array'转换结果将返回一个二维数组

var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 30,
    height: 30,
    color: true,
    format: 'array',
}
asciify("./test.jpeg", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

支持的文件格式

  • JPG
  • PNG
  • GIF

是否支持远程图片呢?

支持

试试百度的 logo

var asciify = require('asciify-image');
var options = {
    fit: 'box',
    width: 100,
    height: 100,
    color: true,
}
asciify("https://www.baidu.com/img/flexible/logo/pc/result.png", options, function (err, asciified) {
    if (err) throw err;
    // 打印到控制台
    console.log(asciified);
});

baidu.png

总结

asciify-image是一款将图片转换为 ASCII art 的工具,没有原生模块依赖,支持(JPG、PNG、GIF)格式的本地及远程文件,看起来可以用来炫技(其实就是装杯用),开玩笑,开玩笑,不喜勿喷

扩展-其他类似的模块

ascii-image-converter

image-to-ascii

欢迎关注我的个人公众号「「小枫学幽默」」一起成长,一起分享生活!!

扫码关注我.png