#image #convert-images #front-end #converter #image-cli #image-processing #cli

bin+lib naut

从终端进行可访问的图像处理和转换(并为'image' crate提供前端)

12个版本

0.14.22 2020年12月25日
0.14.21 2020年12月25日
0.14.6 2020年10月27日

#65#convert-images

每月28次下载

MIT/Apache

380KB
6K SLoC

sic image cli

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

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

sic(sic image cli)是image crate的前端。除了image crate提供的图像操作外,还包括一些额外的有用操作,如diff。可以通过编译带有imageproc-ops功能的imageproc crate来启用由imageproc crate提供的操作。我们打算在未来版本中提供对imageproc操作的更广泛支持。

安装

使用cargo安装:cargo install sic
使用cargo更新:cargo install --force sic

预构建的二进制文件:请参阅发行版

从源代码

  • 设置rust和cargo(例如使用rustup
  • 克隆此存储库:git clone https://github.com/foresterre/sic.git
  • 切换到此存储库:cd sic
  • 构建发布版本:cargo build --release

🍺 MacOS上的Homebrew

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

🍺 Linux上的Homebrew

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

从源代码构建时的MSRV

预期针对最新的Rust稳定版进行开发,但可能在旧版本上也能工作。

用法

转换图像

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

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

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

--help可用于查看支持的所有图像输出格式的完整列表。包括:bmpfarbfeldgificojpg(《code>jpegpngpampbmpgmppm。JPEG质量可以可选地通过--jpeg-encoding-quality <value>设置。值应在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)我们在输入参数周围使用引号(《code>"),这样我们的shell就不会将glob模式扩展为文件列表。2)当使用glob模式时,我们的输出(《code>--glob-output)应该是一个文件夹而不是一个文件。3)我们需要显式使用--output-format来指定输出格式,除非我们与要保留的已知扩展名一起工作。

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


应用图像操作

有两种方法可以应用图像操作。一次只能使用其中一种。

第一种方法称为脚本操作方法(或:脚本),第二种方法称为cli操作方法(或cli ops)。

操作按照它们提供的顺序(从左到右)应用,通常不是可交换的。

📜 脚本操作方法

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

✏️ 命令行操作方法

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


支持的操作
操作 语法 从版本 描述
模糊 模糊<fp> 0.5.0 在图像上执行高斯模糊(更多信息)。如果参数小于 0.0,则使用 1.0 代替。
brighten brighten<int> 0.7.0 创建图像的亮化版本。
contrast contrast<fp> 0.7.0 调整图像的对比度。
crop crop<uint> <uint> <uint> <uint> 0.9.0 语法: crop <lx> <ly> <rx> <ry>,其中 lx 是从 0 开始的左上角 x 像素坐标,ly 是从 0 开始的左上角 y 像素坐标,rx 是右下角 x 像素坐标,ry 是右下角 y 像素坐标。 rxry 应分别大于 lxly
diff diff<path> 0.11.0 将输入图像与参数图像进行比较,以显示哪些像素相同(白色)、不同(红色)或不属于任一图像(透明)。
draw-text draw-text<string> <nv:coord> <nv:rgba> <nv:size> <nv:font> 0.12.0 + 功能: imageproc-ops 在图像上绘制文本(注意:尚未支持 alpha 混合)。
filter3x3 filter3x3<fp9x> 0.7.0 应用一个 3x3 卷积滤波器。
flip horizontal flip-horizontal 0.5.0 在水平轴上翻转图像。
flip vertical flip-vertical 0.5.0 在垂直轴上翻转图像。
gray scale grayscale 0.7.0 将每个像素转换为仅包含光强度的值。将颜色空间减少到仅包含灰度单色值。
hue rotate hue-rotate<int> 0.7.0 旋转色调,参数为度数。旋转 <int>%360 度。
invert invert 0.7.0 反转图像的颜色。
overlay overlay<path> <uint> <uint> 0.14.0 将从提供的参数路径加载的图像叠加到输入图像(在某个位置)上。
调整大小 调整大小<uint> <uint> 0.5.0 调整图像大小为 x x y 像素。可以同时放大和缩小。除非覆盖,否则使用 lanczos3 采样滤波器。在 sic v0.11 之前,默认采样滤波器是 gaussian
> set preserve-aspect-ratio<bool> 0.9.0 在调整大小时启用保持纵横比。
> set sampling-filter<value> 0.9.0 在调整大小时,使用<value>采样滤波器。选项有catmullromgaussianlanczos3nearesttriangle
rotate90 rotate90 0.7.0 旋转图像90度。
rotate180 rotate180 0.7.0 旋转图像180度。
rotate270 rotate270 0.7.0 旋转图像270度。
unsharpen unsharpen<fp> <int> 0.7.0 将非锐化掩码应用到图像上。第一个参数定义图像应该被模糊的程度,第二个参数定义一个阈值。如果原始图像与模糊图像之间的差异至少达到阈值,它们将相互减去。可用于锐化图像。

*确切的语法适用于--应用-操作方法,但也可以用作图像操作的参考图像操作CLI参数方法图像操作的环境操作CLI参数方法.

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

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

图例:

<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
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--翻转-vertical

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

色调旋转示例
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-aspect-ratiotrue --调整大小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--应用-操作"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--应用-操作"unsharpen -0.7 1"
or
sic-iin.png-o out.png--unsharpen-0.7 1

具有多个图像操作(从左到右应用)的示例
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--翻转-水平--sampling-filter nearest--调整大小75 80 --hue-rotate75


其他关于图像操作的资源

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

许可

根据以下之一许可

根据您的选择。

贡献

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

建议、问题、错误

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

🎸 🎺 🎻 🎷

依赖项

~20–31MB
~279K SLoC