如何缩小和优化图片?

时间:2015-12-30 02:50:03

标签: image centos jpeg jpegoptim

我目前在CentOS 6上使用jpegoptim。它可以让您设置质量和文件大小基准。但是,它不允许您调整图像大小。

我有5000张所有文件大小和尺寸的图片,我想缩小到最大宽度和最大文件大小。

例如,我想将所有图像的最大宽度设置为500像素和50 KB。

如何缩小和优化所有这些图像?

1 个答案:

答案 0 :(得分:4)

您可以使用ImageMagick执行此操作,但很难明确说明这样做的方式,因为它取决于所有文件是否在同一目录中,以及您是否拥有或可以使用GNU Parallel。

通常,您可以将单个图像的大小减小到特定宽度500,如下所示:

# Resize image to 500 pixels wide
convert input.jpg -resize 500x result.jpg

允许input.jpgresult.jpg为同一个文件。如果你想做高度,你可以使用:

# Resize image to 500 pixels high
convert input.jpg -resize x500 result.jpg

因为尺寸指定为width x height

如果您只想减少大于500像素的文件,而不进行任何向上调整(提高分辨率),则可以向维度添加>

# Resize images wider than 500 pixels down to 500 pixels wide
convert image.jpg -resize '500x>' image.jpg

如果要减小结果的文件大小,必须使用-define指导JPEG编码器,如下所示:

# Resize image to no more than 500px wide and keep output file size below 50kB
convert image.jpg -resize '500x>' -define jpeg:extent=50KB result.jpg

所以,现在你需要在你的所有文件周围循环:

#!/bin/bash
shopt -s nullglob
shopt -s nocaseglob

for f in *.jpg; do
    convert "$f" -resize '500x>' -define jpeg:extent=50KB "$f"
done

如果您喜欢颠倒所有CPU内核,请使用GNU Parallel来更快地完成工作。

请注意,如果您的文件宽度小于500px,则ImageMagick将不会处理它,因此如果它小于500像素宽且大于50kB,则在文件大小方面不会减少。为了捕获这种不太可能的边缘情况,您可能需要在之后运行另一个find以查找超过50kB的任何文件,然后通过convert但不使用-resize运行它们,如下所示:

find . -type f -iname "*.jpg" -size -51200c -exec convert {} -define jpeg:extent=50KB {} \;