2014-12-28 152 views
0

我有數以百計的圖像,其寬度和高度可能會有所不同。我想調整所有的人都用這個要求:使用imagemagick調整圖像大小

  1. 讓他們小,所以最大的側應該得到2560px或最短的大小應該是1600像素。現在我正在使用此代碼:

    for file in ls;轉換$ file -resize「2560>」new- $文件;完成

    for file in ls;做轉換$文件調整大小「1600 ^>」新建 - $文件;完成

  2. 決不最大方應小於2560或最短的尺寸小於1600像素

  3. 這將是真棒裁剪多餘所以我的最終圖像應該是2560x1600(橫向)或1600x2560(縱向)。

例如,如果我的圖像是4000x3000,我可能會得到2560x1920或2133x1600。我想保留2560x1920並從頂部和底部裁剪160像素以獲得2560x1600。我現在使用

代碼是這樣的:

for i in `ls`; do convert $i -resize '2560x1600^' -gravity center -crop '2560x1600+0+0' new-$i; done 

但是,如果我的形象是3000x4000(肖像模式),我可能會得到2560x3413,然後作物,我拿2560×1600,我想1600x2560。

+0

這對我來說不是很清楚你想要做什麼。例如,如果您的圖像是4000x3000,則可能會獲得2560x1920或2133x1600。你想保持2560x1920並從頂部和底部剪下160像素以獲得2560x1600,或者是否希望保留2133x1600並在左側和右側添加213和214像素的空白空間(黑色?),以便你以這種方式得到2560x1600? – Palo

+0

編輯我的問題。 – user2670996

+0

謝謝。你如何看待它「收穫太多」?你是否裁剪了太多的原始圖像?產生的圖像不是2560x1600?它是從另一個維度收割還是不成比例? – Palo

回答

0

看來需要一個腳本。 這是我基於以前的評論的解決方案:

#!/bin/bash 
# Variables for resize process: 
shortest=1600; 
longest=2560; 
# Ignore case, and suppress errors if no files 
shopt -s nullglob 
shopt -s nocaseglob 

# Process all image files 
for f in *.gif *.png *.jpg; do 

# Get image's width and height, in one go 
read w h < <(identify -format "%w %h" "$f") 

if [ $w -eq $h ]; then 
    convert $f -resize "${shortest}x${shortest}^" -gravity center -crop "${shortest}x${shortest}+0+0" new-$f 
elif [ $h -gt $w ]; then 
    convert $f -resize "${shortest}x${longest}^" -gravity center -crop "${shortest}x${longest}+0+0" new-$f 
else 
    convert $f -resize "${longest}x${shortest}^" -gravity center -crop "${longest}x${shortest}+0+0" new-$f 
fi 

done 
2

我建議你使用這樣的腳本來獲取每個圖像的尺寸。然後,您可以根據圖像大小實現您所需的任何邏輯 - 並且還可以避免解析通常被認爲是不好主意的ls的輸出。

#!/bin/bash 

# Ignore case, and suppress errors if no files 
shopt -s nullglob 
shopt -s nocaseglob 

# Process all image files 
for f in *.gif *.png *.jpg; do 

    # Get image's width and height, in one go 
    read w h < <(identify -format "%w %h" "$f") 

    if [ $w -eq $h ]; then 
     echo $f is square at ${w}x${h} 
    elif [ $h -gt $w ]; then 
     echo $f is taller than wide at ${w}x${h} 
    else 
     echo $f is wider than tall at ${w}x${h} 
    fi 

done 

輸出:

lena.png is square at 128x128 
lena_fft_0.png is square at 128x128 
lena_fft_1.png is square at 128x128 
m.png is wider than tall at 274x195 
1.png is taller than wide at 256x276 
2.png is taller than wide at 256x276