-
Notifications
You must be signed in to change notification settings - Fork 0
/
jpg-resize-ver2.sh
84 lines (69 loc) · 2.15 KB
/
jpg-resize-ver2.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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