簡體   English   中英

如何在終端內遞歸地批量調整 Ubuntu 中的圖像大小?

[英]How to batch resize images in Ubuntu recursively within the terminal?

我有多個圖像存儲在一組有組織的文件夾中。 我需要從它們的父目錄遞歸地將這些圖像的大小調整為特定的百分比 我正在運行 Ubuntu 11.10,我更喜歡直接從終端學習如何操作。

你可以使用imagemagick 例如,要將當前目錄下的所有 JPG 圖像調整為原始大小的 50%,您可以執行以下操作:

for f in `find . -name "*.jpg"`
do
    convert $f -resize 50% $f.resized.jpg
done

生成的文件的名稱中將包含兩次“.jpg”。 如果這是一個問題,您可以檢查以下替代方案。

要遍歷/查找要調整大小的文件,您也可以使用xargs 例子:

find . -name "*.jpg" | xargs convert -resize 50%

這將創建圖像的副本。 如果您只想就地轉換它們,您可以使用:

find . -name "*.jpg" | xargs mogrify -resize 50%

擴展@betabandido的答案

如果圖像所在的文件名或文件夾名稱中有空格,則應將 -print0 與 find 一起使用,將 -0 與 xargs 一起使用,以避免出現任何解析錯誤。

find . -name "*.jpg" -print0 | xargs -0 convert -resize 50%
find . -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%

你也可以使用

sudo apt install imagemagick
sudo apt-get install nautilus-image-converter
nautilus -q

用於調整當前文件夾中的圖像大小/旋轉。 您只需安裝,然后右鍵單擊一個或多個圖像並選擇您想要的大小,就是這樣。 nautilus -q是停止鸚鵡螺。 只需再次啟動 nautilus,您就可以使用圖像轉換器了。

如果您提供新的調整大小分辨率,它也可以工作:

convert $f.jpg -size 1024x768 $f.resized.png

您可以使用 imagemagick 工具批量調整大小。

它將保持縱橫比

$ convert dragon.gif    -resize 64x64  resize_dragon.gif

它不會保持縱橫比

$ convert dragon.gif    -resize 64x64\!  exact_dragon.gif

$ cat resize.sh 
#!/bin/bash
for f in `find . -name "*.jpg"`
do
    convert $f -resize 45x60\!  $f.resize.jpg
done

它會將圖像大小調整為 45x60,而不保持當前目錄中的縱橫比。

有幾個答案,例如:

find . -name "*.jpg" | xargs convert -resize 50%

這將不起作用,因為它會像這樣擴展列表: convert -resize 50% a.jpg b.jpg c.jpg這將調整c-0.jpg a.jpgc-1.jpg b.jpg並讓c.jpg原封不動。

因此,您必須為每個匹配項執行 resize 命令,並同時提供輸入文件名和輸出文件名,例如:

find . -name "*.jpg" | xargs -n 1 sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')'

find每個匹配項都由xargs -n 1單獨傳遞到調整大小腳本: sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\\.jpg/-th\\.jpg/')' 此腳本接收參數$0的文件名,使用sed通過將原始.jpg后綴替換為-th.jpg來生成輸出文件名。 它使用這兩個文件名運行convert命令。

這是沒有xargsfind -exec的版本:

find -name '*.jpg' -exec sh -c 'convert -resize 50% $0 $(echo $0 | sed 's/\.jpg/-th\.jpg/')' {} \;

我稍微修改了已接受答案的代碼以包含 png 文件,並在文件名中添加前綴而不是后綴,以便一次更輕松地 select 所有調整大小的文件。

for p in `find . -name "*.jpg" -o -name "*.png"`
do
    d=${p%/*}
    f=${p##*/}
    b=${f%.*}
    e=${f##*.}
    convert $p -resize 33% $d/thumb.$b.$e
done

稍作修改,就可以將目錄結構重新創建到一個單獨的目錄,並且只調整具有相同目錄結構的文件大小。 另一種選擇是展平目錄結構並隨機生成文件名,並通過每個帶有 append 的拇指文件收集到 CSV 文件的路徑映射。

老問題,但我發現我認為最簡單的方法也處理空格和非“標准”字符。

find -iname "*.jpg" -exec convert {} -resize 1280x1280 {} \;

(這是我的最大尺寸解決方案,但如果你想調整到百分比只是適應)

find -iname "*.jpg" -exec convert {} -resize 50% {} \;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM