You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:39