我正在寻找一种具有以下功能的命令行无损JPEG压缩工具:

是没有GUI界面的命令行工具
我可以提供文件夹列表(其中我可能未优化)图像),它将以递归的方式优化这些文件夹和子文件夹中的所有图像
图像将以与以前相同的名称保存(用旧的未优化图像替换新的图像)

也不是很重要,如果该工具可以

给出报告(每个文件/总共节省了多少空间),那就很好了
也可以调整图像大小
应该正确处理大量文件(> 1000)
删除元数据

尼克·王尔德的答案:
我不知道我应该信任谁:您还是其他人来自创建pageSpeed的Google。当我通过pageSpeed运行jpeg时,它说

无损压缩
httpS://upload.wikimedia.org/.../Lake_mapourika_NZ.jpeg可以保存
16.8KiB(4减少百分比)。

PS使用工具的原因不是为了节省机器上的空间,而是将图像保存在服务器上,因此优化图像将有助于节省用户查看图像的带宽。因此,图像应该是可见的,并且不能将其存档。

#1 楼

经过数小时的bash练习后,我找到了Google如何进行此操作的方法。它使用以下两个程序之一:

jpegtran
jpegOptim

它们都支持无损和有损转换。我在Ubuntu中尝试了第二个,作为jpegoptim

比要做我想做的事我必须做以下事情:想。唯一的问题是,我看到了有关每个文件压缩的​​大量输出,并且无法使用-q删除它,因为它还会删除摘要。但这是我刚刚学到的bash“技能”所能获得的最接近的结果。我在Ask Ask Ubuntu上问了一个后续问题。
它真的很快。处理几千个文件用了不到5秒的时间。

评论


您是否尝试过重定向输出?只需在jpegoptim命令行的末尾添加> / dev / null即可将STDOUT重定向到“数据必杀技”。潜在错误(以及其他所有发送到STDERR的错误)仍将显示。

– Izzy♦
2014年3月21日在9:47

我认为> / dev / null将摆脱所有输出。这不是我想要的,因为我可以使用-q达到相同的目的

–萨尔瓦多·达利(Salvador Dali)
2014年3月21日在9:49

您无需详细说明“多余的输出”。但是,如果要删除的内容很容易与要通过关键字保留的内容区分开,则可以选择| grep -v <非此关键字> | grep -v [...],然后将取消包含提及关键字的所有行。

– Izzy♦
2014年3月21日在9:52

我没有看过jpegoptim的输出。您要保留哪种摘要?为什么为每个目录分别调用它?您可能要询问有关Unix&Linux的那部分内容。

–吉尔斯'所以-不再是邪恶的'
2014年3月21日上午10:59

我已经在ubuntu stackexchange上问过@Gilles了。我在每个目录上分别调用,因为如果我在父目录上调用它,它将告诉我“对不起,未找到图片”

–萨尔瓦多·达利(Salvador Dali)
2014年3月21日在11:08

#2 楼

ImageMagik convert允许命令行使用,批量处理,并将jpeg转换为jpeg2000,这可以节省一些空间并提供其他几种选择。除非您先进行备份,否则我建议您不要覆盖现有文件,除非您检查了转换是否可行,否则任何工具都可能出错。
请注意,如果单独使用zip或targz单个jpeg,通常会导致文件大小增加需要节省空间,那么tar目录和tar确实具有--remove-files选项,可在文件添加到归档文件时删除它们。虽然它不会减小文件的大小,但是只会浪费一个文件之后的空间,而不是每个文件之后的空间。
对于信息:

$ convert -list compress
B44 B44A BZip DXT1 DXT3 DXT5传真组4 JBIG1 JBIG2 JPEG JPEG2000
无损LosslessJPEG LZMA LZW无Piz Pxr24 RLE压缩运行长度编码
压缩


评论


谢谢。如果您有兴趣,我会发现Google是如何做到的。

–萨尔瓦多·达利(Salvador Dali)
2014年3月21日在7:08

我认为检查convert -list格式更可靠。我在compress选项中有JPEG2000,但没有格式,结果为convert -compress jpeg2000 00001.tif 00001.pdf convert:委托库支持未内置00001.pdf'(JP2)@ error / pdf.c / WritePDFImage / 1283。

– Nemo
2015年10月6日13:04

(如imagemagick.org/discourse-server/viewtopic.php?p=120932#p120932所建议)

– Nemo
2015年10月6日13:50

请注意,您可以使用jpeg:extent定义目标大小,例如转换-define jpeg:extent = 400KB。 imagemagick.org/discourse-server/viewtopic.php?t=15386

– Nemo
16年1月25日在11:08

如果输出为有损格式,则convert永远不会无损。因此,这部分是题外话。

–显示名称
18/12/18在15:50

#3 楼

JPEG是一种有损格式-无法通过JPEG压缩无损压缩它们。因此,没有工具可以做到这一点。 >或者另一种方法是分别对zip / 7z / gzip(等)进行压缩并删除原始文件。

评论


感谢您的回答。请检查对我的问题的编辑。

–萨尔瓦多·达利(Salvador Dali)
2014年3月21日,0:55

不幸的是,单独压缩jpeg会增加它们的大小,因为存在开销,而且它们已经被压缩了。如果在保存每个图像后将文件夹完全压缩为磁盘上的浪费空间,则Zipping / targz可以节省空间。

–史蒂夫·巴恩斯(Steve Barnes)
2014年3月21日在5:29

伙计们,这是完全错误的答案。它不仅暗示执行该操作的工具错误,而且传达有关JPEG工作原理的错误信息。不明白为什么有人给了+1

–萨尔瓦多·达利(Salvador Dali)
2014年3月21日在10:09

高质量为100%的JPEG无损。

– Elliott Frisch
2014年3月21日20:00

@ElliottFrisch不,质量为100%的JPEG仍然有损-SO:将质量设置为100时Jpeg是否无损? JPEG2000具有有损和无损模式,但这是不同的。

– Volker Siegel
14年7月13日在22:17