imgp
观看imgp以闪电般的速度调整一个目录中的图像大小!
imgp
是一个用于JPEG和PNG图像的命令行图像调整器和旋转器。它可以一次性调整(或缩略)和旋转数千张图像的大小,速度快如闪电,同时显著节省存储空间。
由多进程处理、SIMD并行(得益于Pillow-SIMD库)、智能自适应算法、递归操作、shell完成脚本、EXIF保留(等等)驱动,imgp
是一个非常灵活的实用工具,具有详细记录的易用选项。
imgp
旨在成为Nautilus图像转换器扩展的更强大替代品,不依赖于任何文件管理器,而且速度更快。在不集成Nautilus的桌面环境(如Xfce或LxQt)中,imgp
将成为你的得力助手。文件管理器nnn提供了一个脚本,可以使用imgp
批量调整图像大小。
目录
功能
- 按百分比或分辨率调整大小
- 按指定角度顺时针旋转
- 考虑方向的自适应调整大小
- 强制调整至特定分辨率
- 优化图像以节省更多空间
- 通过最小图像大小限制处理
- 将PNG转换为JPEG
- 擦除exif元数据
- 指定输出JPEG图像质量
- 强制从小到大调整大小
- 递归处理目录
- 覆盖源图像选项
- 适用于bash、fish和zsh的补全脚本
- 最少的依赖
自适应模式
- 如果指定的方向和图像方向相同[(H >= V 且 h > v) 或 (H < V 且 h < v)],则以较长的指定边作为参考调整图像大小。
- 在交叉方向的情况下[(H >= V 且 h <= v) 或 (H < V 且 h >= v)],则以较短的指定边作为参考调整图像大小。与非自适应模式相同。
例如,如果一个图像的分辨率为2048x1365,正在调整为1366x768:
- 在常规模式(默认)下,输出图像分辨率将为1152x768
- 在自适应模式下,输出图像分辨率将为1366x910
性能
imgp
能够在约8分钟内调整8823张混合分辨率(从高到普通)的图像(约4.5GB大小)的大小,这些图像存储在USB 2.0外部硬盘中,调整后的自适应分辨率为1366x1000。最终大小为897MB(约20%)。
imgp
使用Python PIL/Pillow库。Nautilus图像转换器调用ImageMagick的convert
工具。有关比较基准,请参阅这里。
安装
依赖
imgp
需要Python 3.8或更高版本。
要在Ubuntu上安装PIL库,运行:
sudo apt-get install python3-pil
或者,使用pip3:
sudo pip3 install pillow
在SIMD处理器上,可以用pillow-simd替换pillow。
从包管理器安装
从你的包管理器安装imgp
。如果可用版本较旧,请尝试其他安装方法。
打包状态(展开)
未列出的打包者:
● Homebrew TAP (brew install jarun/imgp/imgp
)
● PyPI (pip3 install imgp
)
● Source Mage (cast imgp
)
发布包
最新稳定版本提供了Arch Linux、CentOS、Debian、Fedora、openSUSE Leap和Ubuntu的软件包。
从源代码安装
如果你已安装git,克隆此仓库。否则下载最新稳定版本或开发版本(风险)。
安装到默认位置(/usr/local
):
sudo make install
要卸载,运行:
sudo make uninstall
支持PREFIX
,以防你想安装到不同的位置。
独立运行
imgp
是一个独立的工具。从包含目录运行:
./imgp
Shell 补全
Bash、Fish和Zsh的Shell补全脚本可以在auto-completion/的相应子目录中找到。请参阅你的Shell手册以获取安装说明。
使用方法
命令行选项
用法: imgp [-h] [-x res] [-o deg] [-a] [-c] [-e] [-f] [-H] [-i] [-k] [-m] [-M res]
[-n] [-N] [-O] [-P] [-q N] [-r] [-s byte] [-w] [-d] [路径 [路径 ...]]
调整 JPEG 和 PNG 图像的大小和旋转角度。
位置参数:
路径 源文件或目录 [默认: 当前目录]
可选参数:
-h, --help 显示此帮助信息并退出
-x res, --res res 输出分辨率,格式为 宽x高 或百分比
-o deg, --rotate deg 顺时针旋转角度(度)
-a, --adapt 根据方向自适应分辨率 [默认: 关闭]
-c, --convert 将 PNG 转换为 JPG 格式 [默认: 关闭]
-e, --eraseexif 删除 exif 元数据 [默认: 关闭]
-f, --force 强制调整到指定的精确分辨率 [默认: 关闭]
-H, --hidden 包含隐藏(点)文件 [默认: 关闭]
-i, --includeimgp 重新处理 _IMGP 文件。* 风险:请参阅文档
-k, --keep 跳过(遵循 -c 或 --pr)与指定的宽或高或 --res=100 匹配的图像 [默认: 关闭]
-m, --mute 静默操作 [默认: 提供信息]
-M res, --minres res 最小分辨率,格式为 宽x高 或 --res 的百分比
-n, --enlarge 放大较小的图像 [默认: 关闭]
-N, --nearest 对 PNG 使用最近邻插值 [默认: 抗锯齿]
-O, --optimize 优化输出图像 [默认: 关闭]
-P, --progressive 将 JPEG 图像保存为渐进式 [默认: 关闭]
-q N, --quality N 质量因子(N=1-95,仅适用于 JPEG) [默认: 75]
-r, --recurse 递归处理非符号链接目录 [默认: 关闭]
-s byte, --size byte 处理图像的最小大小 [默认: 1024]
-w, --overwrite 覆盖源图像 [默认: 关闭]
-d, --debug 启用调试日志 [默认: 关闭]
操作说明
- 可以指定多个文件和目录作为源。如果省略
路径
,则处理当前目录。 - 如果不使用
--overwrite
选项,输出图像名称将附加 _IMGP。默认情况下不处理 _IMGP 文件。在使用--overwrite
选项时这样做可能会导致潜在的竞态条件。 - 目标宽度/高度较低的 PNG 文件不会被转换(即使使用了
--convert
)。请单独运行imgp --convert (*.png)
来转换这些文件。 - 调整大小和旋转是有损操作。为了进一步减小文件大小,请尝试使用
--optimize
和--eraseexif
选项。 --optimize
选项速度较慢,编码器会对图像进行额外的处理以选择最佳编码设置。- 渐进式 JPEG 图像会被保存为渐进式。
示例
-
转换一些图像和目录:
$ imgp -x 1366x768 ~/ ~/Pictures/image3.png ~/Downloads/ /home/testuser/image1.png 3840x2160 -> 1365x768 11104999 字节 -> 1486426 字节 /home/testuser/image2.jpg 2048x1365 -> 1152x768 224642 字节 -> 31421 字节 /home/testuser/Pictures/image3.png 1920x1080 -> 1365x768 2811155 字节 -> 1657474 字节 /home/testuser/Downloads/image4 2048x1365 -> 1152x768 224642 字节 -> 31421 字节
-
将图像缩放到 75% 并覆盖源图像:
$ imgp -x 75 -w ~/image.jpg /home/testuser/image.jpg 1366x767 -> 1025x575 120968 字节 -> 45040 字节
-
将图像顺时针旋转 90 度:
$ imgp -o 90 ~/image.jpg 120968 字节 -> 72038 字节
-
将当前目录中的图像调整为 1366x1000 分辨率。递归访问所有目录,覆盖源图像,忽略宽度或高度匹配的图像,但将 PNG 图像转换为 JPEG。
$ imgp -x 1366x1000 -wrack
-
设置宽度为 800,并保持比例调整高度。
$ imgp -x 800x0 未指定源。正在处理当前目录... ./image1.jpg 1366x911 -> 800x534 69022 字节 -> 35123 字节 ./image2.jpg 1050x1400 -> 800x1067 458092 字节 -> 78089 字节
-
仅处理大于 50KiB 的图像:
$ imgp -wrackx 1366x1000 -s 51200
-
为当前目录中最近修改的文件生成 64px 自适应缩略图:
#!/usr/bin/env sh thumb64 () { pop=$(ls -1t | head -1) imgp -acx 64x64 "$pop" }
开发者
- 版权所有 © 2016-2023 Arun Prakash Jana
- Ananya Jana