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次下载
690KB
7.5K SLoC

sic 图像 CLI
从命令行转换图像和执行图像操作。
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
可以用来查看支持的完整图像输出格式列表。包括
AVIF
、BMP
、OpenExr
、Farbfeld
、GIF
、ICO
、JPEG
、PNG
、PNM
(包括PAM
、PBM
、PGM
和PPM
)、QOI
、TGA
、TIFF
和WebP
。
可选地,可以使用 --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"
- 将所有具有
jpg
、jpeg
和png
扩展名的图像转换为 BMPsic--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 像素坐标。 rx 和 ry 应该分别大于 lx 和 ly 。 |
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> 采样过滤器。选项有catmullrom 、gaussian 、lanczos3 、nearest 、triangle 。 |
旋转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 |
---|---|---|
![]() |
![]() |
![]() |
绘制文本 示例(需要构建功能 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 |
---|---|
![]() |
![]() |
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 License, Version 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
您可选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。
建议、问题、错误
如果您有建议、问题或发现了错误,请随时创建一个问题 📬。
🎸 🎺 🎻 🎷
依赖关系
~19–30MB
~368K SLoC