首先:感谢您花时间阅读本文并提供一些帮助。任何建议表示赞赏。
我正在使用 Nautilus-Actions 添加自定义上下文菜单的操作,以创建 JPG 图像的副本并降低其质量(和文件大小),同时保留图像的尺寸。
假设我有这张图片,文件大小为 2.3 MB(2 261 588 字节),并且:
在 GIMP 2.8 中打开文件以仅导出副本并使用 JPG 导出对话框将图像质量降低到 30%:
我在图像副本中获得了这些属性(251.8 kB(251 797 字节)文件大小):
我正在使用 Nautilus Actions 批处理大量图像,通过在 Nautilus 中选择一堆文件,通过上下文菜单重现相同的行为,右键单击这些选定文件中的任何一个,然后选择适当的 Nautilus Actions 操作。结果是包含与原始尺寸相同的图像的文件,当然质量较低,文件大小稍大(275.3 kB(275 265 字节)文件大小),但这对我来说不是主要问题。
当我尝试批处理多个图像文件时出现问题,这导致第一个文件名被克隆成多个文件名,每个文件名包含不同的图像。使用我在这组命令中设置的属性:
基本上,每个 Nautilus Action 都使用这些参数:
命令: convert
- 来自 (imagemagick)
参数: %F.jpg -quality 80%% %F-80q.jpg
- 这被解释为:
convert path/to/file1.mid.jpg -quality=80% path/to/file1.mid-80q.jpg
工作目录: %d
所以,结果是:
在这里我们可以看到每个图像在不同的文件中处理,但只有第一个文件名用于将新名称分配给复制的文件。我想要这样的结果:
File1.jpg === File1-80q.jpg
File2.jpg === File2-80q.jpg
File3.jpg === File3-80q.jpg
File4.jpg === File4-80q.jpg
等等...
我已经使用 Phatch 来执行此类任务,但我想要的是只需右键单击所选文件并在一个操作中进行处理。
有更好的方法吗?或者...我可以在某种程度上改进我已经在做的事情吗?
非常感谢您的支持。
PS 我已经看到如何在保留文件夹结构的同时将图像批量转换为黑白,有没有办法将 SVG 批量导出为 PNG?但我不是想从终端运行它,而是从上下文菜单运行。如果我在这个练习中遗漏了什么,请不要犹豫让我知道!我会很感激的。谢谢!
编辑
使用muru 的回答后,我发现该解决方案部分满足了我的预期。
更具体地说,它解决了文件名问题。尽管如此,我还希望通过运行正确的convert file.jpg -quality 30%
命令来获得更小的文件大小,并且它正在减少更大的文件大小,如您所见:
有谁知道我是否应该在muru 的回答中看到的参数中添加其他内容?我非常感谢您在这个问题上提供帮助的努力。
更新
我写这篇文章只是为了让人们知道我已经看到压缩问题出在哪里。我试图压缩的文件已经完全压缩了(如muru 的回答中所述):
该过程只是增加了开销而没有获得任何收益。
您不能
%F
在这样的命令中使用两次,因为它%F
会被所选的每个文件的名称替换。例如,sh
带有参数的命令-c 'printf "%%s\n" "$@" > foo' %F %F
将创建一个文件,该文件foo
的名称以所选的每个文件的名称命名,两次。因此convert
实际运行的命令是:由于最后一个文件被用作输出文件名,因此只有它才重要。
您可以做的是将命令包装起来
bash -c
并运行 for 循环:(我假设所有文件都以结尾
.jpg
)在一个动作中,您将拥有
bash
命令和参数:您可以使其更复杂以处理任何扩展,此时您不妨跳过操作并使用脚本。