blob: c190b8710bc41fa8d3766a846af0db0b9358c938 (
plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
cleanphotos() {
local basename
local photo
local sub
while IFS= read -r photo; do
basename=$(basename "$photo")
if [[ -f "$INCOMING_DIR/$basename" ]] \
&& is_supported_image_file "$basename"; then
continue
fi
log_info "Cleaning up $(_display_path "$photo")"
for sub in thumbs blurs photos; do
if [ -f "$DIST_DIR/$sub/$basename" ]; then
rm -f "$DIST_DIR/$sub/$basename"
log_info "removed '$(_display_path "$DIST_DIR/$sub/$basename")'"
fi
done
done < <(find "$DIST_DIR/photos" -maxdepth 1 -type f)
}
is_supported_image_file() {
local -r file="$1"; shift
local extension
if [[ "$file" != *.* ]]; then
return 1
fi
extension="${file##*.}"
extension="${extension,,}"
case "$extension" in
gif|jpeg|jpg|png|webp)
return 0
;;
*)
return 1
;;
esac
}
incoming_image_files() {
local file
while IFS= read -r file; do
if is_supported_image_file "$file"; then
printf '%s\n' "$file"
fi
done < <(find "$INCOMING_DIR" -maxdepth 1 -type f -printf '%f\n') \
| sort
}
warn_unsupported_incoming_files() {
local file
while IFS= read -r file; do
if ! is_supported_image_file "$file"; then
log_warning "Ignoring unsupported incoming file: $file"
fi
done < <(find "$INCOMING_DIR" -maxdepth 1 -type f -printf '%f\n' | sort)
}
scalephotos() {
local -i failed=0
local -a image_job_pids=()
local photo
while IFS= read -r photo; do
wait_for_image_job_slot image_job_pids failed
scale_photo "$photo" &
image_job_pids+=("$!")
done < <(incoming_image_files)
wait_for_image_jobs image_job_pids failed
if (( failed != 0 )); then
return 1
fi
}
scale_photo() {
local -r photo="$1"; shift
local destphoto
local dirname
destphoto="$DIST_DIR/photos/$photo"
dirname=$(dirname "$destphoto")
mkdir -p "$dirname"
if [ -f "$destphoto" ]; then
log_verbose "Skipped existing photo $(_display_path "$destphoto")"
return
fi
log_info "Processing $photo to $(_display_path "$destphoto")"
if [ -n "$HEIGHT" ]; then
# Scale down size.
imagemagick \
"$INCOMING_DIR/$photo" \
-auto-orient \
-geometry "x${HEIGHT}>" \
"$destphoto"
else
# Keep original size.
imagemagick \
"$INCOMING_DIR/$photo" \
-auto-orient \
"$destphoto"
fi
}
|