如何创建适配Dart宝可梦对战项目的小型终端像素画?
解决宝可梦终端像素画尺寸问题的方法
一、缩小现有终端像素画
pokemon-terminal-art的输出是带ANSI颜色代码的纯文本,直接通过文本采样就能快速缩小,用Dart即可实现,无需额外工具:
- 核心逻辑:每隔N行保留一行,每行每隔M个字符保留一个,调整N、M数值就能控制缩小比例。
- Dart实现示例:
import 'dart:io'; String shrinkTerminalArt(String artContent, int rowStep, int colStep) { return artContent.split('\n') // 按行采样,保留每rowStep行中的第1行 .asMap().entries.where((entry) => entry.key % rowStep == 0) .map((rowEntry) { final row = rowEntry.value; // 按字符采样,保留每colStep个字符中的第1个 return row.split('').asMap().entries .where((charEntry) => charEntry.key % colStep == 0) .map((charEntry) => charEntry.value) .join(''); }) .join('\n'); } // 使用示例:读取curl返回的内容并缩小 void main() async { final result = await Process.run('curl', ['-s', '宝可梦艺术画的具体链接']); final originalArt = result.stdout as String; // 缩小为原尺寸的1/2 final shrunkArt = shrinkTerminalArt(originalArt, 2, 2); print(shrunkArt); }
- 调整技巧:如果缩小后显示模糊,可尝试
rowStep=1, colStep=2(仅缩宽度)或rowStep=2, colStep=1(仅缩高度),根据终端窗口大小微调。
二、批量生成自定义尺寸的宝可梦终端像素画
pokemon-terminal-art的作者肯定是自动化生成而非手动绘制,推荐两种方案:
1. 基于官方精灵图转换
宝可梦官方有现成的低像素精灵资源(比如GB/GBA时代的sprite),用Dart的image包就能转成终端文本:
- 示例代码:
import 'dart:io'; import 'package:image/image.dart' as img; String convertSpriteToTerminalArt(String spritePath, int targetWidth, int targetHeight) { // 加载精灵图 final imageBytes = File(spritePath).readAsBytesSync(); final originalImage = img.decodeImage(imageBytes)!; // 缩小到目标尺寸 final resizedImage = img.copyResize(originalImage, width: targetWidth, height: targetHeight); final artBuffer = StringBuffer(); for (int y = 0; y < resizedImage.height; y++) { for (int x = 0; x < resizedImage.width; x++) { final pixel = resizedImage.getPixel(x, y); // 提取RGB颜色值 final r = img.getRed(pixel); final g = img.getGreen(pixel); final b = img.getBlue(pixel); // 写入ANSI彩色字符(用█填充) artBuffer.write('\x1B[38;2;$r;$g;${b}m█'); } // 换行并重置颜色 artBuffer.write('\x1B[0m\n'); } return artBuffer.toString(); } // 使用示例 void main() { final art = convertSpriteToTerminalArt('charizard-sprite.png', 20, 15); print(art); }
- 批量处理:可以写脚本遍历所有宝可梦ID,自动从宝可梦API下载对应精灵图,再调用上述函数批量生成终端艺术。
2. 命令行工具辅助转换
如果不想写代码,可用img2txt这类命令行工具直接将图片转成指定尺寸的终端文本:
img2txt pokemon-sprite.png --width 20 --height 15 --ansi > pokemon-art.txt
生成的文件可直接在项目中读取使用,或用Dart调用该命令批量生成。
三、实战建议
- 优先用缩小现有艺术画的方案快速集成,先让对战展示跑起来,再逐步优化。
- 如果需要精准匹配终端窗口尺寸,建议从官方精灵图重新生成,这样能完全控制输出大小。
内容的提问来源于stack exchange,提问作者Mocky
相关产品推荐
相关产品推荐

