我正在嘗試撰寫一個 bash 腳本,該腳本為檔案夾中的每個影像生成小的縮略圖版本,因此我可以使用它來更有效地加載反應中的影像。
從這個問題中選擇的答案我一直在努力作業;

但是運行腳本bash generate-thumbnails.sh會導致控制臺出錯:
$ ./generate-thumbnails.sh
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 12: [: progressive: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
./generate-thumbnails.sh: line 17: convert: command not found
./generate-thumbnails.sh: line 12: [: JFIFstandard1.01: integer expression expected
./generate-thumbnails.sh: line 12: [: -ge: unary operator expected
我如何配置 bash 腳本有問題嗎?還是我呼叫它的程序?
uj5u.com熱心網友回復:
- 使用
file命令來確定影像大小是不可靠的。輸出格式因影像格式而異。而是使用identifyImageMagick 套件命令。 - 不建議對用戶變數使用大寫字母。它可能與系統變數沖突。
請您嘗試一下:
#!/bin/bash
thumbs_folder=./aesthetic-images/thumbnails
mkdir -p "$thumbs_folder"
for file in ./aesthetic-images/*; do
# next line checks the mime-type of the file
image_type=$(file --mime-type -b "$file")
if [[ $image_type = image/* ]]; then
image_size=$(identify -format "%[fx:w]x%[fx:h]" "$file")
IFS=x read -r width height <<< "$image_size"
# If the image width is greater that 200 or the height is greater that 150 a thumb is created
if (( width > 200 || height > 150 )); then
#This line convert the image in a 200 x 150 thumb
filename=$(basename "$file")
extension="${filename##*.}"
filename="${filename%.*}"
convert -sample 200x150 "$file" "${thumbs_folder}/${filename}_thumb.${extension}"
fi
fi
done
uj5u.com熱心網友回復:
這應該是您的腳本的一個非常可靠的重新實作:
#!/usr/bin/env sh
# Checks required ImageMagic commands are available or exit fail
if ! for cmd in identify convert; do
command -V "$cmd"
done >/dev/null 2>&1; then
printf 'Missing required command %s\n' "$cmd" >&2
exit 1
fi
img_folder=~/Images
thumbs_folder="$img_folder/thumbnails"
# Creates thumbnails directory if not exit
mkdir -p "$thumbs_folder"
for file in "$img_folder/"*; do
# If $file = pattern then no match, exit
[ "$file" = "$img_folder/*" ] && exit
mime_type="$(file -b --mime-type "$file" 2>&1)" || continue
# Check what to do based on mime-type
case $mime_type in
image/x-xcf) continue ;; # Not supported
image/*) ;; # Accept for processing
*) continue ;; # Not an image
esac
identify -format '%w %h' "$file" | {
# Reads piped-in width and height
read -r width height
if [ "$width$height" ] && { [ "$width" -gt 200 ] || [ "$height" -gt 150 ]; }; then
basename="${file##*/}"
extension="${basename##*.}"
ext_less="${basename%.*}"
thumb_file="${thumbs_folder}/${ext_less}_thumb.${extension}"
printf 'Create thumb file for %s, size: %d %d\n' \
"$file" "$width" "$height"
convert -sample 200x150 "$file" "$thumb_file"
fi
}
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/464139.html
