15 个版本 (破坏性更新)
| 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.10.0 | 2019年9月28日 |
#843 in 图像
每月 28 次下载
在 4 crates 中使用
195KB
3.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)、QOITGA、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就不会将通配符模式展开成文件列表。2) 当使用通配符模式时,我们的输出(--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是左上角x像素坐标,从0开始,ly是左上角y像素坐标,从0开始,rx是右下角x像素坐标,ry是右下角y像素坐标。分别应大于lx和ly。 |
| diff | diff<路径> |
将输入图像与参数图像进行比较,以显示哪些像素是相同的(白色),不同的(红色)或不属于任一图像(透明)。 |
| draw-text ^2 | 绘制-文本<字符串> <nv:坐标> <nv:rgba> <nv:大小> <nv:字体> |
在图像上绘制文本(注意:alpha混合尚不支持)。 |
| filter3x3 | filter3x3<fp9x> |
应用3x3卷积滤波器。 |
| 水平翻转 | flip-horizontal |
沿水平轴翻转图像。 |
| 垂直翻转 | flip-vertical |
沿垂直轴翻转图像。 |
| 灰度 | 灰度值 |
将每个像素转换为一个只包含亮度值的强度。将色彩空间减少为只包含灰度单色值。 |
| 水平渐变 | 水平-渐变<nv:rgba> <nv:rgba> |
从左到右填充并混合图像的水平渐变。 |
| 色调旋转 | 色调-旋转<int> |
旋转色调,参数以度为单位。旋转 <int>%360 度。 |
| 反转 | 反转 |
反转图像中的颜色。 |
| 叠加 | 叠加<路径> <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> |
对图像应用非锐化蒙版。第一个参数定义图像应该被模糊的程度,第二个参数定义一个阈值。如果原始图像与模糊图像之间的差异至少是阈值,它们将相互减去。可用于锐化图像。 |
| 垂直渐变 | 垂直-渐变<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>)
示例
blur 示例
sic-iin.png-o out.png--应用-操作"blur 1.3;"
or
sic-iin.png-o out.png--模糊1.3
brighten 示例
sic-iin.png-o out.png--应用-操作"brighten 2;"
or
sic-iin.png-o out.png--brighten2
contrast 示例
sic-iin.png-o out.png--应用-操作"contrast 0.7;"
or
sic-iin.png-o out.png--contrast0.7
crop 示例
sic-iin.png-o out.png--应用-操作"crop 0 0 10 10;"
or
sic-iin.png-o out.png--crop0 0 10 10
diff 示例
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 |
|---|---|---|
![]() |
![]() |
![]() |
draw-text 示例(需要构建功能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 |
|---|---|
![]() |
![]() |
filter3x3 示例
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--应用-操作"灰度值"
or
sic-iin.png-o out.png--灰度值
水平渐变 示例
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--水平-渐变"rgba(255, 0, 0, 255)" "rgba(0, 0, 255, 255)"
色调旋转 示例
sic-iin.png-o out.png--应用-操作"色调旋转 -90"
or
sic-iin.png-o out.png--色调-旋转-90
反转 示例
sic-iin.png-o out.png--应用-操作"反转"
or
sic-iin.png-o out.png--反转
叠加 示例
sic-iin.png-o out.png--应用-操作"叠加 'image.png' 10 10"
or
sic-iin.png-o out.png--叠加"image.png" 10 10
调整大小 示例
sic-iin.png-o out.png--应用-操作"调整大小 100 100"
or
sic-iin.png-o out.png--调整大小100 100
调整大小 并 保持纵横比 示例
sic-iin.png-o out.png--应用-操作"设置 preserve-aspect-ratio true; 调整大小 100 100"
or
sic-iin.png-o out.png--保持-宽高比-比例是 --调整大小100 100
调整大小 并使用 自定义采样滤波器(默认为 'lanczos3')示例
sic-iin.png-o out.png--应用-操作"设置采样滤波器 triangle; 调整大小 100 100"
or
sic-iin.png-o out.png--采样-滤波器 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--应用-操作"去锐化 -0.7 1"
or
sic-iin.png-o out.png--非锐化-0.7 1
垂直渐变 示例
sic-iin.png-o out.png--应用-操作"垂直渐变 rgba(255, 0, 0, 255) rgba(0, 0, 255, 255)"
or
sic-iin.png-o out.png--垂直-渐变"rgba(255, 0, 0, 255)" "rgba(0, 0, 255, 255)"
包含从左到右应用多个图像操作的示例
sic-iin.png-o out.png--应用-操作"旋转180; 水平翻转; 设置采样滤波器 nearest; 调整大小 75 80; 色调旋转 75"
or
sic-iin.png-o out.png--旋转180度--翻转-水平--采样-滤波器 nearest--调整大小75 80 --色调-旋转75
其他图像操作资源
有关可用选项和标志的更多信息,请运行 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 许可证定义的您有意提交以包含在本作品中的任何贡献,均应按上述方式双重许可,不附加任何额外条款或条件。
建议、问题、错误
如果您有建议、问题或发现了错误,请随时创建一个问题 📬。
🎸 🎺 🎻 🎷
依赖项
~15MB
~200K SLoC







