Add files via upload
This commit is contained in:
84
jpg-resize-ver2.sh
Normal file
84
jpg-resize-ver2.sh
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "用法: $0 <輸入文件> [-l <最大寬度或高度>] [-p <縮放百分比>] [-s <目標大小(kB)>]"
|
||||
echo "至少需要指定 -l、-p 或 -s 中的一個選項"
|
||||
echo "注意: -l 和 -p 選項不能同時使用"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 初始化變數
|
||||
input_file=""
|
||||
max_dimension=""
|
||||
scale_percent=""
|
||||
target_size=""
|
||||
|
||||
# 檢查第一個參數是否為輸入文件
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "錯誤: 請指定一個輸入文件"
|
||||
usage
|
||||
fi
|
||||
|
||||
input_file="$1"
|
||||
shift
|
||||
|
||||
# 解析命令行參數
|
||||
while getopts ":l:p:s:" opt; do
|
||||
case $opt in
|
||||
l) max_dimension="$OPTARG" ;;
|
||||
p) scale_percent="$OPTARG" ;;
|
||||
s) target_size="$OPTARG" ;;
|
||||
\?) echo "無效選項: -$OPTARG" >&2; usage ;;
|
||||
:) echo "選項 -$OPTARG 需要一個參數" >&2; usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 檢查是否至少指定了一個選項
|
||||
if [ -z "$max_dimension" ] && [ -z "$scale_percent" ] && [ -z "$target_size" ]; then
|
||||
echo "錯誤: 請至少指定 -l、-p 或 -s 中的一個選項"
|
||||
usage
|
||||
fi
|
||||
|
||||
# 檢查 -l 和 -p 是否同時使用
|
||||
if [ -n "$max_dimension" ] && [ -n "$scale_percent" ]; then
|
||||
echo "錯誤: -l 和 -p 選項不能同時使用"
|
||||
usage
|
||||
fi
|
||||
|
||||
# 檢查輸入文件是否存在
|
||||
if [ ! -f "$input_file" ]; then
|
||||
echo "錯誤: 輸入文件 '$input_file' 不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 生成輸出文件名(始終使用 .jpg 擴展名)
|
||||
filename=$(basename -- "$input_file")
|
||||
filename="${filename%.*}"
|
||||
output_file="${filename}_resized.jpg"
|
||||
|
||||
# 構建 convert 命令
|
||||
convert_cmd="convert \"$input_file\""
|
||||
|
||||
if [ -n "$max_dimension" ]; then
|
||||
convert_cmd+=" -resize ${max_dimension}x${max_dimension}>"
|
||||
elif [ -n "$scale_percent" ]; then
|
||||
convert_cmd+=" -resize ${scale_percent}%>"
|
||||
fi
|
||||
|
||||
if [ -n "$target_size" ]; then
|
||||
convert_cmd+=" -define jpeg:extent=${target_size}kb"
|
||||
fi
|
||||
|
||||
convert_cmd+=" \"$output_file\""
|
||||
|
||||
# 執行轉換
|
||||
echo "Executing: $convert_cmd"
|
||||
eval $convert_cmd 2>&1 | grep -v "unable to open image \`extent="
|
||||
|
||||
# 檢查輸出文件是否存在和大小是否大於 0
|
||||
if [ -f "$output_file" ] && [ -s "$output_file" ]; then
|
||||
echo "轉換成功: 輸出文件為 $output_file"
|
||||
else
|
||||
echo "錯誤: 轉換失敗"
|
||||
exit 1
|
||||
fi
|
Reference in New Issue
Block a user