#image #preview #load-image #sixel #protocols #gif #blocks

bin+lib pic

命令行界面中预览图像

5 个版本

0.1.4 2023年3月21日
0.1.3 2023年3月18日
0.1.2 2023年2月19日
0.1.1 2023年2月19日
0.1.0 2023年2月19日

图形API 中排名第271

MITLGPL-3.0-or-later

38KB
794

PIC 📷

PIC (Preview Image in CLI ) 是一个轻量级的 Rust 工具,可在您的终端中预览图像!
支持各种图像协议(KittySixeliTerm),在多个终端中工作,并在您的终端不受支持的情况下仍可使用 Unicode 块。PIC 还提供库供您在自己的工具中使用!

功能

  • 选择您喜欢的协议
    • Kitty 图形,具有多个操作(load/clear
    • Sixel,在许多终端中工作
    • iTerm,非常出色地显示 GIF
    • 其他情况下使用 Unicode 块和真彩色/ansi256 支持
  • 自定义
    • --x--y 选项来选择显示图像的位置
    • --cols--rows 选项来选择图像的大小(始终尝试保持比例)
    • --upscale 选项在需要时以所需的完整大小预览图像
    • --static--loop 选项用于与 GIF 交互
    • --protocol 选项用于选择协议
    • --load--display--clear 选项用于与 Kitty 协议交互

安装

先决条件

命令行说明

# Clone the repository
git clone https://github.com/emsquid/pic

# Build and install
cargo install --path pic

# Use freely
pic Images/YourFavouriteImage.png --cols 13 ...

从 Cargo

先决条件

命令行说明

# Build and install
cargo install pic

# Use freely again
pic Images/YourFavouriteImage.png --cols 13 ...

作为库

先决条件

命令行说明

# Add the dependency in your project directory
cargo add pic

示例

块和高质量的预览

demo demo

广泛的选项选择

options

在 iTerm 中显示非常出色的 GIF

iterm

在 Blocks 中也显示得很好

gotcha

命令行用法

Preview Image in CLI.

Usage: pic [OPTIONS] [PATH]...

Arguments:
  [PATH]...  Image(s) to preview

Options:
  -p, --protocol <PROTOCOL>  Previewing protocol to use [possible values: kitty, sixel, iterm, blocks]
  -x, --x <X>                x position (0 is left)
  -y, --y <Y>                y position (0 is top)
  -c, --cols <COLS>          Number of cols to fit the preview in
  -r, --rows <ROWS>          Number of rows to fit the preview in
      --spacing <SPACING>    Spacing between images if more than one file is provided
  -u, --upscale              Upscale image if needed
  -n, --no-newline           Don't print newline after preview
  -s, --static               Only show first frame of GIFs
  -l, --loop                 Loop GIFs infinitely
      --load <ID>            Load image with the given id (kitty only)
      --display <ID>         Display image with the given id (kitty only)
      --clear <ID>           Clear image with the given id (0 for all) (kitty only)
  -h, --help                 Print help
  -V, --version              Print version

库用法

use pic

fn main() {
    // Choose images to preview
    let path1 = std::path::PathBuf::from("Picture/MyFavImage.png");
    let mut options = pic::options::Options::new(vec![path1]);

    // Set your options
    options.set_position(Some(10), None);
    options.set_size(Some(50), Some(50));
    options.upscale();

    // Preview
    if let Err(err) = pic::previewer::preview(&mut std::io::stdout(), &mut options) {
        eprintln!("{err}");
    };
}

注意

  • Sixel 协议可能需要安装 libsixel
  • iTerm 协议总是循环播放 GIF,除非指定了 --static

进度

非常感谢帮助

  • 文档
    • 编写更好的 README
    • 制作发布版本/包(在 crates.io 上发布)
  • 协议支持
    • 使用 Kitty 协议预览 GIF
    • 使用 Unicode 块预览 GIF
    • 处理透明度/GIF 的 Sixel 协议(GIF 可以工作但渲染效果不佳)
    • 改进协议支持检查(需要在各种终端中进行测试)
  • 杂项
    • 以某种方式实现缓存
    • 显示更酷的错误信息
    • 编写测试(我想我需要这么做...)

依赖项

~23–33MB
~283K SLoC