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. 出力が常に96×96になるようにアスペクト比を無視するには、次のよう-resize 96x96に変更します-resize 96x96\!これを読んでください
  2. .pngが上記の一部ではない理由filename:fは次のとおりです。なぜなら:

警告、ファイル名の設定にファイルのサフィックスを含めないでください。 IMは、ファイル名設定に含まれていない形式ではなく、元のファイル形式で画像を保存します。つまり、ファイル名には指定したサフィックスが付きますが、画像形式は異なる場合があります。

関連情報