입력 이미지를 가져와 크기를 확인하는 다음 스크립트 부분에 문제가 있습니다. 특정 크기가 아닌 경우 이미지 크기가 조정됩니다.
내 질문은 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
- 첫째, 기존 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'
}
[노트]:
- 출력이 항상 96x96이 되도록 종횡비를 무시하려면 다음
-resize 96x96
으로 변경하십시오-resize 96x96\!
.이것을 읽어보세요. - .png가 위의 일부가 아닌 이유
filename:f
는 다음과 같습니다.왜냐하면:
경고, 파일 이름 설정에 파일 접미사를 포함하지 마세요! IM에서는 보지 않고 파일명 설정에 포함된 형식이 아닌 원본 파일 형식으로 이미지를 저장합니다. 즉, 파일 이름에는 지정한 접미사가 붙지만 이미지 형식은 다를 수 있습니다!