#svg #颜色 #反转 #命令行工具 #

程序+库 svg-invert

一个用于反转 SVG 图像颜色的命令行工具和库

2 个版本

0.0.2 2024 年 5 月 12 日
0.0.1 2024 年 5 月 11 日

#904命令行工具

MIT 许可协议

60KB
234

svg-invert

Build Status codecov Crates.io Documentation

一个用于反转 SVG 文件颜色的 CLI 工具。


💁‍♂️ 用例

如果您需要反转 SVG 文件中的所有颜色(填充和描边),这个简单的 CLI 工具就是为您准备的。

我的原始用例是能够反转黑白图表,以便在电子书的亮色和暗色模式下使用,但我认为这个工具可以满足许多其他用例。 告诉我您将如何使用它!🚀

🛠️ 安装

您可以使用预编译的二进制文件(如果适用于您的操作系统和架构)或从源代码编译来安装 svg-invert

使用预编译的二进制文件

您可以从 发布页面 下载预编译的二进制文件并将它们放置在您的 PATH 目录中。

如果您系统中有 cargo binstall,您可以使用它来安装 svg-invert 的最新版本

cargo binstall svg-invert

此方法的优势在于自动将二进制文件放置在您的 PATH 目录中。此外,如果您的操作系统和架构没有提供二进制文件,cargo binstall 将为您编译它(假设您的系统中已安装所有必要的 Rust 构建工具链)。

从源代码编译

如果您已经在您的系统中安装了 Rust 工具链,您可以使用 cargo 从源代码编译 svg-invert

cargo install svg-invert

👩‍🏫 使用方法

目前,svg-invert 只提供非常简单和最小化的界面:从 stdin 输入数据和到 stdout 输出数据

svg-invert < some-lovely.svg > inverted-some-lovely.svg

或者,如果您喜欢 Unix 管道

cat some-lovely.svg | svg-invert > inverted-some-lovely.svg

例如,如果这是 some-lovely.svg 的内容

A lovely crab with a Lambda hat

运行命令后,这将变成 inverted-some-lovely.svg 的内容

A lovely crab with a Lambda hat with inverted colours

[注意] 如果你觉得这个小螃蟹很可爱,你应该看看我的书Crafting Lambda Functions in Rust,在那里你可以学习如何使用Rust和AWS Lambda构建无服务器应用程序!🦀🚀 有趣的事实:这个实用工具最初是为了创建在电子书的亮色和暗色版本上都看起来不错的SVG图表而诞生的!

作为库的使用

您也可以将此实用工具作为您自己的Rust程序的一部分使用,将其作为库来使用。

您可以使用以下命令安装库:

cargo add svg-invert

然后您可以在您的Rust程序中使用它,如下所示

use std::io::{stdin, stdout, BufReader, BufWriter, Write};
use svg_invert::invert_svg;

let reader = BufReader::new(stdin());
let writer = BufWriter::new(stdout());
match invert_svg(reader, writer) {
  Ok(_) => {
    // makes sure to flush stdout before exiting
    // since we are using a BufWriter
    match stdout().flush() {
      Ok(_) => {}
      Err(e) => {
        eprintln!("Error: {e}");
      }
    }
  }
  Err(e) => {
    eprintln!("Error: {e}");
  }
}

处理多个图像

svg_invert::invert_svg 是创建一个新的InvertSvg实例并调用其invert_svg方法的快捷方式。

如果您打算在同一个程序中处理多个SVG图像,创建一个单独的InvertSvg实例并重用它可能是有益的。

事实上,一个InvertSvg实例内部有一个缓存,存储它处理的SVG图像的翻转颜色。因此,通过重用同一个实例,如果您的图像恰好具有相同的颜色,您可能会获得一些性能提升。

use svg_invert::InvertSvg;

let invert_svg = InvertSvg::new();
// call invert_svg.invert_svg(...) multiple times

👷 贡献

每个人都非常欢迎为这个项目做出贡献。您可以通过在GitHub上创建一个问题来提交错误或建议改进。

👩‍⚖️ 许可证

MIT许可证下授权。© Luciano Mammino。

依赖关系

~0.6–1MB
~23K SLoC