23 个不稳定版本 (6 个重大更改)
0.7.0-alpha.4 | 2024年3月11日 |
---|---|
0.7.0-alpha.1 | 2024年2月20日 |
0.4.9 | 2023年7月16日 |
0.4.7 | 2022年11月14日 |
#171 在 命令行工具
每月125 次下载
43KB
821 行
aarty
在终端/TTY中渲染图片的小型框架。
示例
let cfg = Config::new(vec![' ', '.', ',', '-', '~', '!', '*', '%', '$', '@', '#'].into());
let image = image::open("mylove.jpg").unwrap();
let (w, h) = image.dimensions();
let mut out = BufWriter::with_capacity(cfg.calc_buf_size(w, h), io::stdout().lock());
convert_image_to_ascii(&cfg, &image, &mut out).expect("IO error");
启用前景颜色
let cfg = Config::new(vec![' ', '.', ',', '-', '~', '!', '*', '%'].into()).with_flags(COLORS);
// ...
使用背景颜色反转它们
let cfg = Config::new(Sympols::empty()).with_background((232, 209, 204)).with_flags(COLORS | REVERSE);
// ...
如果您想在内存中构建一个表示,以便您可以修改它或多次使用,那么您可能会发现为这种结构体实现 FragmentWriter
是有用的。
struct TerminalFrame {
fragments: Vec<(char, ANSIColor)>,
cfg: Config,
}
impl FragmentWriter for TerminalFrame {
fn background(&mut self, _: &ANSIColor) -> Result<bool, Box<dyn std::error::Error>> {
// Nah, I don't care, I have my configs :p
// but pretent like if you care so it will skip the swap operation.
Ok(true)
}
fn write_fragment(&mut self, info: FragmentInfo) -> Result<(), Box<dyn std::error::Error>> {
self.fragments.push((info.sym, info.fg));
Ok(())
}
fn write_colored_fragment(
&mut self,
info: FragmentInfo,
_: Option<&ANSIColor>,
_: Option<&ANSIColor>,
) -> Result<(), Box<dyn std::error::Error>> {
self.write_fragment(info)
}
fn write_bytes(&mut self, _bytes: &[u8]) -> Result<(), Box<dyn std::error::Error>> {
// Just ignore them
Ok(())
}
}
// So you can use it as a buffer
let cfg = Config::new(vec!['I', 'L', 'O', 'V', 'E', 'U'].into()).with_flags(COLORS);
let image = image::open("mylove.jpg").unwrap();
let (w, h) = image.dimensions();
let mut frame = TerminalFrame {
fragments: Vec::with_capacity(w as usize * h as usize),
cfg: cfg.clone(),
};
aarty::convert_image_to_ascii(&cfg, &image, &mut frame).expect("Write error");
// Do whatever you want with this object...
但请注意,这样做时,您将不得不在打印图片时(即渲染它时)实现渲染机制。
对于这种情况,我们提供了 TextImage
,它基本上与上面的代码做同样的事情,但以更易于使用的方式,并且它实现了渲染机制,所以您可以直接打印它,它将正确渲染图像。您可以通过启用 text_image
功能来启用此类型,该功能默认启用。
text_image
功能还包括 ToTextImage
特性,它提供了一种构建 TextImage
对象的更易于使用的方法。
use aarty::ToTextImage;
let cfg = Config::new_with_background(Sympols::empty(), (232, 209, 204).into()).with_flags(COLORS | REVERSE);
let image = image::open("mylove.jpg").unwrap().to_text(cfg);
println!("{image}");
您必须启用
image
功能才能使此功能正常工作。
二进制文件
我们提供了一个简单的二进制文件,实现了此包的大部分功能。您可以使用构建命令构建它,或者如果您使用 cargo,则可以通过 cargo install aarty
安装它。
[!注意]有关二进制文件及其使用方法的更多信息,您可以运行
aarty --help
或查看此 match。
贡献
我很高兴接受任何贡献,但请先阅读CONTRIBUTING.md指南。
主要关键词包括:签名提交,常规提交,无表情符号,线性历史,PR通常不应该包含超过三个提交
许可
本项目采用MIT许可。
依赖关系图
依赖关系
~3MB
~56K SLoC