AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 611321
Accepted
Geppettvs D'Constanzo
Geppettvs D'Constanzo
Asked: 2015-04-20 08:46:55 +0800 CST2015-04-20 08:46:55 +0800 CST 2015-04-20 08:46:55 +0800 CST

如何使用 Nautilus-Actions 批处理 JPG 图像以更改其质量?

  • 772

首先:感谢您花时间阅读本文并提供一些帮助。任何建议表示赞赏。

我正在使用 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 操作对话框

基本上,每个 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 的回答中所述):

该过程只是增加了开销而没有获得任何收益。

command-line
  • 1 1 个回答
  • 2810 Views

1 个回答

  • Voted
  1. Best Answer
    muru
    2015-04-20T09:23:53+08:002015-04-20T09:23:53+08:00

    您不能%F在这样的命令中使用两次,因为它%F会被所选的每个文件的名称替换。例如,sh带有参数的命令-c 'printf "%%s\n" "$@" > foo' %F %F将创建一个文件,该文件foo的名称以所选的每个文件的名称命名,两次。因此convert实际运行的命令是:

    convert file1.jpg file2.jpg ... -quality 80% file1.jpg file2.jpg ... fileN.jpg-80q.jpg
    

    由于最后一个文件被用作输出文件名,因此只有它才重要。

    您可以做的是将命令包装起来bash -c并运行 for 循环:

    bash -c 'for i; do convert "$i" -quality 80% "${i/%.jpg/-80q.jpg}"; done'
    

    (我假设所有文件都以结尾.jpg)

    在一个动作中,您将拥有bash命令和参数:

    -c 'for i; do convert "$i" -quality 80%% "${i/%%.jpg/-80q.jpg}"; done' - %F
    

    您可以使其更复杂以处理任何扩展,此时您不妨跳过操作并使用脚本。

    • 4

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve