
我的資料夾中有一堆圖像:
images/image1.jpg
images/image2.jpg
...
這些圖像未針對網路進行最佳化。
只是想知道是否有一個 Linux 命令可以一步批量優化這些映像?
更新:我需要為每個圖像做兩件事:
如果影像的寬度高於 900px,則將寬度減小到 900px(保持比例)
以較低品質儲存文件,假設為原始品質的 70%。
答案1
安裝圖像魔術師:
sudo apt-get install imagemagick
並使用convert
指令如下:
mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done
答案2
如果您有大量文件,並且希望快速完成此操作,您也可以使用並行程序:
sudo apt install imagemagick parallel
然後是以下內容:
find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
-set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'
讓我們來看看:
find
-- 尋找文件.
-- 在目前目錄下\( -name '*.jp*g' -o -name '*.png' \)
-- 可以是 png 或 jpeg(「jpg」和「jpeg」都是常見的副檔名!)-a ! -name '*.min.*'
-- 並且跳過已經最小化的文件-type f
-- 是實際文件,而不是符號連結或名稱奇怪的目錄-print0
-- 列印這些檔案並用空位元組分隔(這樣空格就不會破壞東西)
parallel
-- 讀取前一個命令並為每個元素並行執行此命令-0
-- 每個元素以空位元組分隔convert {}
-- 使用替換的檔案名稱呼叫 imagemagick「轉換」程序{}
resize '>900x' -quality '70%'
-- 將影像大小調整為 x 軸上的最大 900 像素,並將 jpeg 品質變更為 70%。有許多其他可能的選項在這裡。-set filename:newname "%d/%[basename].min.%[extension]"
-- 使用新檔案名稱建立一個變數。請參閱文件以了解所有有效值。%d
-- 檔案所在的目錄%[basename]
-- 不含任何副檔名的檔名%[extension]
-- 檔案的原始副檔名
"%[filename:newname]"
-- 我們在上一步設定的輸出檔名