ImageMagick cli를 사용하여 이미지 크기를 얻는 방법은 무엇입니까?

ImageMagick cli를 사용하여 이미지 크기를 얻는 방법은 무엇입니까?

입력 이미지를 가져와 크기를 확인하는 다음 스크립트 부분에 문제가 있습니다. 특정 크기가 아닌 경우 이미지 크기가 조정됩니다.

내 질문은 ImageMagick을 사용하여 확인하려면 if 블록에 무엇을 넣어야 합니까?

내 현재 코드:

#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

identify -format '%w %h' your_file

너비, 공백, 높이를 출력합니다.

각 항목을 개별적으로 저장하려면 다음과 같이 하세요.

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

답변2

  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'
}

[노트]:

  1. 출력이 항상 96x96이 되도록 종횡비를 무시하려면 다음 -resize 96x96으로 변경하십시오 -resize 96x96\!.이것을 읽어보세요.
  2. .png가 위의 일부가 아닌 이유 filename:f는 다음과 같습니다.왜냐하면:

경고, 파일 이름 설정에 파일 접미사를 포함하지 마세요! IM에서는 보지 않고 파일명 설정에 포함된 형식이 아닌 원본 파일 형식으로 이미지를 저장합니다. 즉, 파일 이름에는 지정한 접미사가 붙지만 이미지 형식은 다를 수 있습니다!

관련 정보