Bash
如何使用 ImageMagick cli 獲取圖像尺寸?
我在以下腳本的一部分中遇到問題,它獲取輸入的圖像並檢查其尺寸。如果它不是某個尺寸,那麼它會調整圖像的大小。
我的問題是我會在 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 }
- 首先,你不可能有 96x96 的現有圖片,所以大多數情況下你需要轉換。您不必辨識和比較尺寸。
- 不要相信文件名的副檔名,.png 並不意味著它是 PNG 圖像。
- 測試命令然後安裝是不必要的檢查並且不可移植(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 $$:
警告,不要在文件名設置中包含文件後綴!IM 不會看到它,並使用原始文件格式保存圖像,而不是文件名設置中包含的那種。那就是文件名會有你指定的後綴,但是圖片格式可能不同!
identify -format '%w %h' your_file
將輸出寬度,空格,然後是高度。
如果你想單獨儲存每個,你可以這樣做:
width =`identify -format '%w' your_file` height=`identify -format '%h' your_file`