10次重大版本更新

0.22.0 2023年4月22日
0.20.0 2022年3月30日
0.19.1 2022年3月17日
0.19.0 2021年6月5日
0.10.0 2019年9月28日

#5 in #sic

每月26次下载
5 个包中使用

MIT/Apache

47KB
171

The sic project logo

sic图像命令行工具

ci Crates.io version shield Docs Crates.io license shield

从命令行转换图像和执行图像操作。

sic (sic图像命令行工具) 是 image包 的前端。除了image包提供的图像操作外,还包括一些额外的有用操作,如diff。通过使用 imageproc-ops 功能,可以启用imageproc包提供的操作。我们打算在未来的版本中提供对imageproc操作的更广泛支持。sic支持对静态和动画图像的操作。

安装

使用cargo安装

  • 运行 cargo install sic

预构建的二进制文件

从源码构建

  • 设置rust和cargo(例如使用rustup
  • 克隆此仓库:git clone https://github.com/foresterre/sic.git && cd sic
  • 构建发行版:cargo build --release

sic通常针对最新的稳定Rust版本进行构建,但也可能支持旧版本。

使用包管理器

Homebrew

🍺 MacOS上的Homebrew

brew tap tgotwig/sic
brew install tgotwig/sic/sic

🍺 Linux上的Homebrew

brew tap tgotwig/linux-sic
brew install tgotwig/linux-sic/sic

emerge

gentoo Linux通过GURU overlay

emerge -av media-gfx/sic

使用方法

转换图像

将图像从一种格式转换为另一种格式,例如从PNG转换为JPG。

  • 命令: sic --input <input> --output <output>
  • 缩写: sic -<input> -<output>
  • 示例: sic -.png -.jpg

如果您想明确设置图像输出格式,可以通过提供 --output-format <format> 参数来实现。否则,sic 将尝试从输出文件扩展名推断格式。

--help 可以用来查看支持的完整图像输出格式列表。包括

  • AVIFBMPOpenExrFarbfeldGIFICOJPEGPNGPNM (PAMPBMPGMPPM),QOI TGATIFFWebP

可选地,可以使用 --jpeg-encoding-quality <value> 设置 JPEG 质量。值应在 1-100 范围内(默认为 80)。格式为 PNM(具有 PBM、PGM 和 PPM 的一种子类型)的文件默认使用二进制编码(PNM P4、P5 和 P6 分别)。要使用 ascii 编码,可以提供以下标志:--pnm-encoding-ascii

转换或对一组图像应用操作

对于您有一个包含多个(数百个)图像的目录,您想将其转换为不同的格式,或者可能想对其应用某些图像操作的情况,sic 提供了内置的 glob 模式匹配。此模式可以通过提供 --glob-input--glob-output 选项而不是 --input--output 来使用。

示例

  • 要将图像目录从 PNG 转换为 JPG,可以运行 sic 并提供以下参数
    • sic--glob-input"*.png" --glob-output output_dir--output-format jpg"
  • 将所有具有 jpgjpegpng 扩展名的图像转换为 BMP
    • sic--glob-input"*.{jpg, jpeg, png}" --glob-output output_dir--output-format bmp
  • 将文件夹中的所有图像浮雕化(假设它只包含受支持的图像文件,没有文件夹)
    • sic--glob-input"*" --glob-output embossed_output--filter3x3-1 -1 0 -1 1 1 0 1 1

一些值得注意的事项:1) 我们在输入参数周围使用引号("),这样我们的 shell 就不会将 glob 模式扩展为文件列表。2) 当使用 glob 模式时,我们的输出(--glob-output)应该是一个文件夹而不是一个文件。3) 我们需要明确使用 --output-format 指定输出格式,除非我们正在处理我们想要保留的已知扩展名。

输出图像将按与所有输入文件的第一共同目录镜像的目录结构放置在输出文件夹中。如果输出目录不存在,则将创建它们。


图像操作

sic 中,您可以使用图像操作来操作图像。图像操作可以直接从 CLI 使用,也可以通过 sic 的 图像脚本 使用。

注意:操作按从左到右的顺序应用,通常不具有交换律。当通过CLI选项和标志应用图像操作时,这可能会特别令人惊讶。

📜 图像脚本

使用此方法,请使用 --apply-operations "<operations>" (缩写:-x) CLI参数,并给出语句告诉sic对图像应应用哪些操作,例如
sic-i 输入.jpg-o 输出.jpg--应用-操作"水平翻转; 模糊 10; 调整大小 250 250"
当提供多个图像操作时,应使用分隔符;来分隔每个操作语句。

✏️ CLI 操作

通过直接提供CLI图像操作参数,如--blur--crop,来使用此方法。
如果我们使用CLI操作方法,之前显示的示例变为
sic-i 输入.png-o 输出.jpg--翻转-水平--模糊10 --调整大小250 250


可用图像操作
操作 语法^1 描述
模糊 模糊<fp> 对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。
brighten brighten<int> 创建图像的亮化版本。
contrast contrast<fp> 调整图像的对比度。
crop crop<uint> <uint> <uint> <uint> 语法:crop <lx> <ly> <rx> <ry>
✏️ CLI ops ✏️ CLI ops<使用此方法,请直接提供CLI图像操作参数,如--blur--crop> png
翻转 水平-模糊<调整大小> <可用图像操作:语法^1> <可用图像操作:描述> <可用图像操作:fp> <可用图像操作:对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。> brighten
filter3x3 filter3x3<int> 创建图像的亮化版本。
contrast 调整图像的对比度。 crop
uint 语法:crop <lx> <ly> <rx> <ry> fp
对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。 brighten int
创建图像的亮化版本。 水平-contrast<可用图像操作:描述> <可用图像操作:描述> 调整图像的对比度。
crop uint-语法:crop <lx> <ly> <rx> <ry><int> fp
对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。 对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。 brighten
int int<使用此方法,请直接提供CLI图像操作参数,如--blur--crop> <uint> <uint> 创建图像的亮化版本。
调整大小 调整大小<uint> <uint> 将图像调整到 x by y 像素大小。可以放大和缩小。除非有其他指定,否则使用 lanczos3 样本滤波器。在 sic v0.11 之前,默认的样本滤波器是 gaussian
> 设置保留-纵横比-比例<布尔值> 在调整大小时启用保持纵横比。
> 设置采样-过滤器<> 调整大小时使用 <value> 样本过滤器。选择项包括 catmullromgaussianlanczos3nearesttriangle
旋转90度 旋转90度 将图像旋转90度。
旋转180度 旋转180度 将图像旋转180度。
旋转270度 旋转270度 将图像旋转270度。
阈值 阈值 在图像上应用自动阈值。
去锐化 去锐化<fp> <int> 将去锐化蒙版应用于图像。第一个参数定义图像应该模糊多少,第二个参数定义一个阈值。如果原始图像与模糊图像之间的差异至少为阈值,则它们将相互减去。可以用来锐化图像。
垂直渐变 垂直-contrast<可用图像操作:描述> <可用图像操作:描述> 从顶部到底部填充和混合图像的垂直渐变。

^1 _表中的语法适用于图像脚本,但也可以在通过 CLI 参数使用图像操作时作为参考_
^2 draw-text 仅在编译了 imageproc-ops 功能时可用

图像操作修饰符

对于某些操作,可以通过设置操作修饰符来调整其行为。这些修饰符可以被覆盖,并且也可以被重置(到默认行为)。

环境操作 语法 描述
设置环境选项 设置<选项> [<参数0..n>] 启用对操作的修饰符使用。任何使用修饰符值的操作将使用设置的修饰符值而不是默认值。可以通过再次调用 set 来覆盖同一操作和修饰符指定符。
取消设置环境选项 删除<选项> 重置修饰符值。任何查看此修饰符值的操作将使用默认值。

图例:

<byte>:一个 8 位无符号整数(范围在 0-255 之间的正数
<uint>:一个 32 位无符号整数(正数
<int>:一个 32 位有符号整数(正数或负数
<fp>:一个 32 位浮点数(实数
<fp9x>:9 个后续的 32 位浮点数
<path>:一个有效的路径,该路径可以从您的当前平台访问到图像(路径应被引号包围,即 " 或 ')
<string>:一个有效的 Unicode 字符串

<nv:coord>:表示坐标(左上角为(0, 0))的命名值,语法为 coord(<uint>, <uint>)
<nv:rgba>:表示 RGBA 颜色的命名值,语法为:rgba(<byte>, <byte>, <byte>, <byte>)
<nv:size>:表示字体大小的命名值,语法为:size(<fp>)
<nv:font>:表示 (TrueType) 字体文件位置的命名值,语法为:font(<path>)

示例

模糊 示例
sic-iin.png-o out.png--应用-操作"blur 1.3;"
or
sic-iin.png-o out.png--模糊1.3

亮化 示例
sic-iin.png-o out.png--应用-操作"brighten 2;"
or
sic-iin.png-o out.png--brighten2

对比度 示例
sic-iin.png-o out.png--应用-操作"contrast 0.7;"
or
sic-iin.png-o out.png--contrast0.7

裁剪 示例
sic-iin.png-o out.png--应用-操作"crop 0 0 10 10;"
or
sic-iin.png-o out.png--crop0 0 10 10

差异 示例
sic-i a.png-o diff_between_a_and_b.png--应用-操作"diff 'b.png'"
or
sic-i a.png-o diff_between_a_and_b.png--diff b.png

a b output
a b output

带有动画图像

a b output
a b output

绘制文本 示例(需要构建功能 imageproc-ops
sic-iin.png-o out.png--应用-操作"draw-text '<3' coord(10, 2) rgba(255, 0, 0, 255) size(14) font('./Lato-Regular.ttf')"
or
sic-iin.png-o out.png--水平-模糊"<3" "coord(10, 2)" "rgba(255, 0, 0, 255)" "size(14)" "font('Lato-Regular.ttf')"

input output
in out

3x3 筛选器 示例
sic-iin.png-o out.png--应用-操作"filter3x3 -1 -1 0 -1 0 1 0 1 1"
or
sic-iin.png-o out.png--filter3x3-1 -1 0 -1 0 1 0 1 1

水平翻转 示例
sic-iin.png-o out.png--应用-操作"调整图像的对比度。"
or
sic-iin.png-o out.png--翻转-水平

垂直翻转 示例
sic-iin.png-o out.png--应用-操作"语法:crop <lx> <ly> <rx> <ry>"
or
sic-iin.png-o out.png--翻转-垂直

灰度 示例
sic-iin.png-o out.png--应用-操作"brighten"
or
sic-iin.png-o out.png--brighten

水平渐变 示例
sic-iin.png-o out.png--应用-操作"horizontal-gradient rgba(255, 0, 0, 255) rgba(0, 0, 255, 255)"
or
sic-iin.png-o out.png--水平-contrast"rgba(255, 0, 0, 255)" "rgba(0, 0, 255, 255)"

色调旋转 示例
sic-iin.png-o out.png--应用-操作"hue-rotate -90"
or
sic-iin.png-o out.png--uint-语法:crop <lx> <ly> <rx> <ry>-90

反转 示例
sic-iin.png-o out.png--应用-操作"对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。"
or
sic-iin.png-o out.png--对图像执行高斯模糊(更多信息)。低于0.0的参数将使用1.0代替。

叠加 示例
sic-iin.png-o out.png--应用-操作"overlay 'image.png' 10 10"
or
sic-iin.png-o out.png--int"image.png" 10 10

调整大小 示例
sic-iin.png-o out.png--应用-操作"resize 100 100"
or
sic-iin.png-o out.png--调整大小100 100

调整大小保持纵横比 示例
sic-iin.png-o out.png--应用-操作"set preserve-aspect-ratio true; resize 100 100"
or
sic-iin.png-o out.png--preserve-纵横比-比例true --调整大小100 100

调整大小 并使用 自定义采样筛选器(默认为 'lanczos3')示例
sic-iin.png-o out.png--应用-操作"set sampling-filter triangle; resize 100 100"
or
sic-iin.png-o out.png--sampling-filter triangle--调整大小100 100

旋转 90 度 示例
sic-iin.png-o out.png--应用-操作"旋转90度"
or
sic-iin.png-o out.png--旋转90度

旋转 180 度 示例
sic-iin.png-o out.png--应用-操作"旋转180度"
or
sic-iin.png-o out.png--旋转180度

旋转 270 度 示例
sic-iin.png-o out.png--应用-操作"旋转270度"
or
sic-iin.png-o out.png--旋转270度

阈值 示例
sic-iin.png-o out.png--应用-操作"阈值"
or
sic-iin.png-o out.png--阈值

去锐化 示例
sic-iin.png-o out.png--应用-操作"unsharpen -0.7 1"
or
sic-iin.png-o out.png--去锐化-0.7 1

垂直渐变 示例
sic-iin.png-o out.png--应用-操作"vertical-gradient rgba(255, 0, 0, 255) rgba(0, 0, 255, 255)"
or
sic-iin.png-o out.png--垂直-contrast"rgba(255, 0, 0, 255)" "rgba(0, 0, 255, 255)"

具有从左到右应用的多 图像操作的示例
sic-iin.png-o out.png--应用-操作"rotate180; flip-horizontal; set sampling-filter nearest; resize 75 80; hue-rotate 75"
or
sic-iin.png-o out.png--旋转180度--翻转-水平--sampling-filter nearest--调整大小75 80 --uint-语法:crop <lx> <ly> <rx> <ry>75


其他关于图像操作的资源

有关可用选项和标志的更多信息,请运行sic --help

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以包含在工作中的任何贡献,将如上所述双重许可,不附加任何额外条款或条件。

建议、问题、错误

如果您有任何建议、问题或发现错误,请随时打开一个问题 📬。

🎸 🎺 🎻 🎷

依赖

~23MB
~187K SLoC