[英]How to shrink and optimize images?
我目前在CentOS 6上使用jpegoptim
。它可讓您設置質量和文件大小基准。 但是,它不允許您調整圖像的大小。
我有5000張所有文件尺寸和尺寸的圖像,我希望縮小到最大寬度和最大文件尺寸。
例如,我想將所有圖像的最大寬度減小到500像素和50 KB。
如何縮小和優化所有這些圖像?
您可以使用ImageMagick來執行此操作,但是很難明確地說出執行該操作的方法,這取決於所有文件是否都在同一目錄中以及是否可以使用GNU Parallel。
通常,您可以將單個圖像的大小減小到500的特定寬度,如下所示:
# Resize image to 500 pixels wide
convert input.jpg -resize 500x result.jpg
其中input.jpg
和result.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 {} \;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.