docs.rs failed to build kitty-graphics-protocol-0.1.3
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
kitty-graphics-protocol-0.1.2
Kitty Graphics Protocol
一个完整的 Rust 实现的 Kitty 终端图形协议 库,允许你在支持该协议的终端中显示图像和动画。
功能特性
- ✅ 完整支持所有图形协议命令
- ✅ 支持 RGB、RGBA 和 PNG 图像格式
- ✅ 大图像分块传输
- ✅ 动画支持
- ✅ Unicode 占位符支持
- ✅ 终端窗口大小检测
- ✅ 协议支持检测
- ✅ 零依赖图像显示(PNG 格式)
- ✅ 类型安全的 Builder 模式 API
兼容终端
安装
在 Cargo.toml 中添加依赖:
[]
= "0.1"
快速开始
显示 PNG 图片
use display_png;
// 最简单的方式 - 直接显示 PNG 文件
display_png.unwrap;
显示内存中的 PNG 数据
use display_png_data;
let png_data = read.unwrap;
display_png_data.unwrap;
显示原始 RGB/RGBA 数据
use ImageDisplay;
let display = new;
// 显示 RGB 数据 (每像素 3 字节)
let rgb_data: = vec!;
display.display_rgb.unwrap;
// 显示 RGBA 数据 (每像素 4 字节)
let rgba_data: = vec!;
display.display_rgba.unwrap;
详细用法
1. 高级 ImageDisplay 接口
ImageDisplay 提供了一个高级接口来管理图像显示:
use ImageDisplay;
let display = new
.quiet; // 抑制所有响应消息
// 显示 PNG 文件
display.display_png_file.unwrap;
// 显示 PNG 数据
let png_data = read.unwrap;
display.display_png.unwrap;
// 显示原始像素数据
display.display_rgb.unwrap;
display.display_rgba.unwrap;
// 清除所有可见图像
display.clear_all.unwrap;
2. 图片 ID 管理(传输一次,多次显示)
use ImageDisplay;
let display = new;
let png_data = read.unwrap;
// 传输图片但不显示,分配 ID 为 123
display.transmit_png.unwrap;
// 在不同位置多次显示同一图片
display.place_image.unwrap; // 10 列, 5 行
display.place_image.unwrap; // 20 列, 5 行
// 清除图片
display.clear_all.unwrap;
3. 使用 Command Builder(低级 API)
对于完全控制,使用 Command builder:
use ;
use Write;
// 构建命令
let cmd = builder
.action
.format
.quiet // 抑制响应
.z_index // 设置 z-index
.display_area // 显示区域: 20 列 x 10 行
.build;
// 序列化为转义序列块
let png_data = read.unwrap;
let chunks: = cmd.serialize_chunked.unwrap.collect;
// 输出到终端
let mut stdout = stdout.lock;
for chunk in chunks
stdout.flush.unwrap;
4. 显示原始像素数据
use ;
// RGB 格式 (每像素 3 字节: R, G, B)
let width = 100;
let height = 50;
let rgb_data: =
.map
.collect;
let cmd = builder
.action
.format
.dimensions
.build;
// 输出
let chunks: = cmd.serialize_chunked.unwrap.collect;
for chunk in chunks
5. 删除图像
use ;
// 方式 1: 清除所有图像
clear_all_images.unwrap;
// 方式 2: 使用 Command
let cmd = delete_all;
let seq = cmd.serialize.unwrap;
print!;
// 方式 3: 按 ID 删除
let cmd = delete_by_id;
let seq = cmd.serialize.unwrap;
print!;
// 方式 4: 使用 DeleteTarget
let cmd = builder
.action
.delete_target
.build;
6. 终端信息查询
use ;
// 检查协议支持
match check_protocol_support
// 获取窗口大小
match get_window_size
7. 动画支持
use ;
// 停止动画
let cmd = builder
.action
.animation_control
.image_id
.build;
// 运行动画
let cmd = builder
.action
.animation_control
.image_id
.loop_count // 无限循环
.frame_gap // 帧间隔 100ms
.build;
API 参考
主要类型
| 类型 | 描述 |
|---|---|
ImageDisplay |
高级图像显示接口 |
Command |
图形协议命令 |
CommandBuilder |
命令构建器 |
WindowSize |
终端窗口大小信息 |
快捷函数
| 函数 | 描述 |
|---|---|
display_png(path) |
显示 PNG 文件 |
display_png_data(data) |
显示 PNG 数据 |
clear_all_images() |
清除所有图像 |
check_protocol_support() |
检查协议支持 |
get_window_size() |
获取窗口大小 |
枚举类型
| 枚举 | 描述 |
|---|---|
Action |
命令动作类型 |
ImageFormat |
图像格式 (RGB=24, RGBA=32, PNG=100) |
TransmissionMedium |
传输方式 |
DeleteTarget |
删除目标 |
AnimationControl |
动画控制 |
Compression |
压缩算法 |
CursorPolicy |
光标移动策略 |
示例
项目包含两个示例程序:
基础示例 - 显示图片文件
高级示例 - 程序化生成图像
运行示例
# 克隆仓库
# 运行基础示例
# 运行高级示例
注意事项
- 终端兼容性: 确保在支持 Kitty 图形协议的终端中运行
- 图像格式: 原生支持 PNG 格式;其他格式需转换为 RGB/RGBA 原始数据
- 大图像: 大图像会自动分块传输,无需手动处理
- 图像清理: 程序退出前建议调用
clear_all_images()清理显示的图像
错误处理
use ;
match display_png
性能
- 使用 Base64 编码传输数据
- 支持分块传输大图像(默认 4KB 块)
- 零拷贝设计,最小化内存分配
许可证
MIT License
参考资料
贡献
欢迎提交 Issue 和 Pull Request!