Bash

如何使用 ImageMagick cli 獲取圖像尺寸?

  • December 8, 2018

我在以下腳本的一部分中遇到問題,它獲取輸入的圖像並檢查其尺寸。如果它不是某個尺寸,那麼它會調整圖像的大小。

我的問題是我會在 if 塊中放入什麼來使用 ImageMagick 進行檢查?

我目前的程式碼:

#Change profile picture f(x)
#Ex. changeProfilePicture username /path/to/image.png
function changeProfilePicture() {
   userName="$1"
   filePath="$(readlink -f "$2")"
   fileName="${filePath##*/}" #baseName + fileExtension
   baseName="${fileName%.*}"
   fileExtension="${filePath##*.}"

   echo "Checking if imagemagick is installed..."
   if ! command brew ls --versions imagemagick >/dev/null 2>&1; then
       echo "Installing imagemagick..."
       brew install imagemagick -y
       echo "imagemagick has been installed."
   else
       echo "imagemagick has already been installed."
   fi

   # check the file extension. If it's not png, convert to png.
   echo "Checking file-extension..."
   if ! [[ $fileExtension = "png" ]]; then
           echo "Converting to ''.png'..."
           convert $fileName "${baseName}".png
           fileName=$baseName.png
           echo "File conversion was successful."
   else
       echo "File-extension is already '.png'"
   fi

   # check the dimensions, if its not 96x96, resize it to 96x96.
   #I don't know what to put inside the following if-block:
   if ! [[  ]]; then
       echo "Resizing image to '96x96'..."
       convert $fileName -resize 96x96 "${fileName}"
       echo "Image resizing was successful."
   else
       echo "Image already has the dimensions of '96x96'."
   fi

   echo "changing profile picture to " "$filePath"
   sudo cp "$filePath" /var/lib/AccountsService/icons/
   cd /var/lib/AccountsService/icons/
   sudo mv $fileName "${userName}"
   cd ~/Desktop
}
  1. 首先,你不可能有 96x96 的現有圖片,所以大多數情況下你需要轉換。您不必辨識和比較尺寸。
  2. 不要相信文件名的副檔名,.png 並不意味著它是 PNG 圖像。
  3. 測試命令然後安裝是不必要的檢查並且不可移植(apt-get,dnf,…等)。事實上,如果發生這種情況,它應該輸出“找不到命令”。此外,此檢查可能會減慢您的功能。

那麼,為什麼不簡單地做:

#Ex. changeProfilePicture username /path/to/image.png
function changeProfilePicture () {
   sudo mkdir -p -- '/var/lib/AccountsService/icons/'"$1"
   sudo convert "$2" -set filename:f '/var/lib/AccountsService/icons/'"$1/%t" -resize 96x96 '%[filename:f].png'
}

$$ Note $$:

  1. 如果您想忽略縱橫比以確保輸出始終為 96x96,請更改-resize 96x96-resize 96x96\!閱讀此
  2. .png 不作為filename:f上述一部分的原因是:

警告,不要在文件名設置中包含文件後綴!IM 不會看到它,並使用原始文件格式保存圖像,而不是文件名設置中包含的那種。那就是文件名會有你指定的後綴,但是圖片格式可能不同!

identify -format '%w %h' your_file

將輸出寬度,空格,然後是高度。

如果你想單獨儲存每個,你可以這樣做:

width =`identify -format '%w' your_file`
height=`identify -format '%h' your_file`

引用自:https://unix.stackexchange.com/questions/288184