16 个版本 (10 个重大更新)

0.22.1 2023年9月16日
0.22.0 2023年4月22日
0.21.0 2023年1月19日
0.20.1 2022年12月12日
0.12.0 2020年6月1日

#891 in 图像

Download history 57/week @ 2024-03-14 3/week @ 2024-03-21 13/week @ 2024-03-28 6/week @ 2024-04-04 1/week @ 2024-05-30

每月下载 96 次
2 crate 中使用

MIT/Apache

285KB
5K SLoC

The sic project logo

sic 图像命令行工具

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

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

sic (sic 图像命令行工具) 是 image crate 的前端。除了 image crate 提供的图像操作外,还包含一些额外的有用操作,如 diff。通过编译时启用 imageproc-ops 功能,可以启用 imageproc crate 提供的操作。我们打算在未来的版本中提供更广泛的支持。 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 -i <input> -o <output>
  • 示例: sic -i input.png -o output.jpg

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

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

  • AVIFBMPOpenExrFarbfeldGIFICOJPEGPNGPNM(包括 PAMPBMPGMPPM),QOITGATIFFWebP

可选地,可以通过 --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--应用-操作"flip-horizontal; blur 10; resize 250 250"
当提供多个图像操作时,应使用分隔符 ; 来分隔每个操作语句。

✏️ CLI操作

直接提供CLI图像操作参数,例如 --blur--crop 来使用此方法。
如果我们使用 CLI操作 方法,之前显示的示例将变为
sic-i 输入.png-o 输出.jpg--flip-horizontal--blur10 --resize250 250


可用图像操作
操作 语法^1 描述
blur blur<fp> 对图像执行高斯模糊 (更多信息)。如果参数小于 0.0,则使用 1.0
brighten brighten<int> 创建图像的亮化版本。
contrast contrast<fp> 调整图像的对比度。
crop crop<uint> <uint> <uint> <uint> 语法: crop <lx> <ly> <rx> <ry>,其中 lx 是左上角x像素坐标,从0开始,ly 是左上角y像素坐标,从0开始,rx 是右下角x像素坐标,ry 是右下角y像素坐标。 rxry 应大于 lxly
diff diff<path> 将输入图像与参数图像进行比较,以显示哪些像素是相同的(白色)、不同的(红色)或不属于任何图像(透明)。
draw-text ^2 draw-text<string> <nv:coord> <nv:rgba> <nv:size> <nv:font> 在图像上方绘制文本(注意:尚未支持alpha混合)。
filter3x3 filter3x3<fp9x> 应用3x3卷积滤波器。
flip horizontal flip-horizontal 在水平轴上翻转图像。
flip vertical flip-vertical 在垂直轴上翻转图像。
gray scale grayscale 将每个像素转换为仅包含光强度的强度值。将颜色空间减少到仅包含灰度单色值。
horizontal gradient horizontal-gradient<nv:rgba> <nv:rgba> 用从左到右的水平渐变填充并混合图像。
hue rotate hue-rotate<int> 旋转色调,参数以度为单位。旋转 <int>%360 度。
invert invert 反转图像的颜色。
overlay overlay<path> <uint> <uint> 将从提供的参数路径加载的图像叠加到输入图像(在特定位置)上。
resize resize<uint> <uint> 将图像调整到x乘以y像素。可以放大和缩小。除非指定,否则使用lanczos3采样滤波器。在v0.11版本之前,默认采样滤波器是gaussian
> 设置保留-长宽比-比例<布尔型> 在调整大小时启用长宽比保留。
> 设置采样-滤波器<> 在调整大小时使用<value>采样滤波器。选项包括catmullromgaussianlanczos3nearesttriangle
rotate90 rotate90 将图像旋转90度。
rotate180 rotate180 将图像旋转180度。
rotate270 rotate270 将图像旋转270度。
threshold threshold 在图像上应用自动阈值。
unsharpen unsharpen<fp> <int> 对图像应用去锐化蒙版。第一个参数定义图像应该模糊的程度,第二个参数定义一个阈值。如果原始图像和模糊图像之间的差异至少为阈值,它们将被相减。可用于锐化图像。
vertical gradient 垂直-gradient<nv:rgba> <nv:rgba> 从顶部到底部填充和混合图像的垂直渐变。

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

图像操作修饰符

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

环境操作 语法 描述
设置环境选项 设置<选项> [<参数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--blur1.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--draw-text"<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--应用-操作"flip-horizontal"
or
sic-iin.png-o out.png--flip-horizontal

垂直翻转 示例
sic-iin.png-o out.png--应用-操作"flip-vertical"
or
sic-iin.png-o out.png--flip-垂直

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

水平渐变 示例
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--horizontal-gradient"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--hue-rotate-90

反转 示例
sic-iin.png-o out.png--应用-操作"invert"
or
sic-iin.png-o out.png--invert

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

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

调整大小保持纵横比 示例
sic-iin.png-o out.png--应用-操作"set preserve-aspect-ratio true; resize 100 100"
or
sic-iin.png-o out.png--preserve-长宽比-比例true --resize100 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--resize100 100

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

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

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

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

锐化 示例
sic-iin.png-o out.png--应用-操作"unsharpen -0.7 1"
or
sic-iin.png-o out.png--unsharpen-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--垂直-gradient"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--rotate180--flip-horizontal--sampling-filter nearest--resize75 80 --hue-rotate75


关于图像操作的其它资源

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

许可

许可方式如下

任选其一。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,都应双许可如上,无需额外条款或条件。

建议、问题、错误

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

🎸 🎺 🎻 🎷

依赖项

~25MB
~224K SLoC