#image #front-end #converter #image-cli #input-output

bin+lib sic

从终端进行可访问的图像处理和转换(以及 'image' 包的前端)

29 个版本 (18 个重大变更)

0.22.4 2023年9月16日
0.22.3 2023年5月18日
0.22.2 2023年4月27日
0.21.1 2023年1月21日
0.4.0 2018年7月3日

#119 in 图像

每月39次下载

MIT/Apache

690KB
7.5K SLoC

The sic project logo

sic 图像 CLI

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

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

sic(sic 图像 CLI)是 image crate 的前端。除了 image crate 提供的图像操作外,还包括一些额外的有用操作,如 diff。可以通过使用 imageproc-ops 功能启用 imageproc crate 提供的操作。我们打算在未来版本中提供更多对 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 覆盖层

emerge -av media-gfx/sic

用法

转换图像

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

  • 命令:sic --input <input> --output <output>
  • 缩写: sic -i <input> -o <output>
  • 示例: sic -.png -.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--应用-操作"水平翻转; 模糊 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>,其中 lx 是从 0 开始的左上角 x 像素坐标,ly 是从 0 开始的左上角 y 像素坐标,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 水平-gradient<nv:rgba> <nv:rgba> 从左到右使用水平渐变填充并混合图像。
hue rotate hue-rotate<int> 旋转色调,参数以度为单位。旋转 <int>%360 度。
invert invert 反转图像的颜色。
overlay overlay<path> <uint> <uint> 将加载自提供的参数路径的图像覆盖在输入图像(在某个位置)上。
调整大小 调整大小<uint> <uint> 将图像调整为 x x y 像素。可以向上和向下缩放。除非覆盖,否则使用 lanczos3 采样过滤器。在 sic v0.11 之前,默认采样过滤器是 gaussian
> 设置保留-纵横比-比例<布尔值> 启用调整大小时保留纵横比。
> 设置采样-过滤器<> 调整大小时使用<value>采样过滤器。选项有catmullromgaussianlanczos3nearesttriangle
旋转90度 旋转90度 将图像旋转90度。
旋转180度 旋转180度 将图像旋转180度。
旋转270度 旋转270度 将图像旋转270度。
阈值 阈值 对图像应用自动阈值。
非锐化 非锐化<fp> <int> 对图像应用非锐化蒙版。第一个参数定义图像应该模糊多少,第二个参数定义一个阈值。如果原始图像与模糊图像之间的差异至少达到阈值,它们将相互减去。可用于锐化图像。
垂直渐变 垂直-gradient<nv:rgba> <nv:rgba> 从顶部到底部填充和混合图像的垂直渐变。

^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--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--翻转-水平

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

灰度 示例
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--水平-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--调整大小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--垂直-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--旋转180度--翻转-水平--sampling-filter nearest--调整大小75 80 --hue-rotate75


关于图像操作的其他资源

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

许可证

许可协议为以下之一:

您可选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。

建议、问题、错误

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

🎸 🎺 🎻 🎷

依赖关系

~19–30MB
~368K SLoC