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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
#!/bin/bash
# little script to generate image galleries for use with original.
# uses imagemagick's convert
# (c) 2005 boris de laage <bdelaage@free.fr>
# based on imgconv by Jakub Steiner
#
#�The 'help' section sucks, as my english does.
#default options
dir=./web-gallery
zip=0
rotate=0
mq=0
hq=0
interactive=0
verbose=echo
#info.txt stuff
gal_auth=""
gal_name=""
gal_desc=""
gal_date=""
gal_user=""
gal_pass=""
# convert options
convertor=`which convert`
jhead=`which jhead`
extra_ops="-strip"
# This script
name=`basename $0`
# getopt stuff
shortopts="a:hHin:d:D:Mqo:Zr"
longopts="author:quiet,help,interactive,name:,date:,description:,\
mq,hq,output:,archive,rotate"
function echo_help {
cat <<EOF
Usage : $1 [OPTIONS]... [FILE]...
Convert FILEs
-o, --output DIR make gallery in DIR
-M, --mq include 1024x768 images (MQ)
-H, --hq include original images (HQ)
-Z, --archive make archives
-i, --interactive edit gallery informations interactively
-a, --author NAME set author's name
-n, --name NAME set gallery's name
-d, --date DATE set date to DATE
-D, --description DESC description
-r, --rotate automatically rotate image based on EXIF
-q, --quiet don't say anything
-h, --help display this help and exit
FILEs must be JPG, JPEG or PNG. if DIR is not given, the
gallery will be created in $dir.
EOF
}
good_file() {
local ftype
ftype=`file -b "$1" | cut -d " " -f 1`
if [ "$ftype" == "JPG" ] || [ "$ftype" == "JPEG" ] || [ "$ftype" == "PNG" ]
then
return 0
else
return 1
fi
}
# If we don't have ImageMagick, cry & exit
if [ -z $convertor ]; then
echo "convert not found... Please install ImageMagick."
exit 1
fi
# Parse options
TEMP=`getopt -o $shortopts --long $longopts -n $name -- "$@"`
[ $? != 0 ] && exit 1
eval set -- "$TEMP"
while true; do
case "$1" in
-h|--help)
echo_help $name ; exit 0 ;;
-i|--interactive)
interactive=1 ; shift ;;
-n|--name)
gal_name=$2 ; shift 2 ;;
-d|--date)
gal_date=$2 ; shift 2 ;;
-D|--description)
gal_desc=$2 ; shift 2 ;;
-a|--author)
gal_auth=$2 ; shift 2 ;;
-o|--output)
dir=$2 ; shift 2 ;;
-Z|--zip)
zip=1 ; shift ;;
-r|--rotate)
rotate=1 ; shift ;;
-q|--quiet)
verbose=false ; shift ;;
-M|--mq)
mq=1 ; shift ;;
-H|--hq)
hq=1 ; shift ;;
--)
shift ; break ;;
*)
echo "OOops.. getopt error !" ; echo $@ ; exit 1 ;;
esac
done
# If we don't have JHead and we want to auto-rotate images, cry & exit
if [ $rotate -gt 0 ] && [ -z $jhead ]; then
echo "jhead not found... Please install JHead."
exit 1
fi
# If no input files are given, display usage & exit
if [ $# == 0 ]; then
cat <<EOF
Usage: $name [-hMHZ] [-o directory] file...
$name -o Gallery *.jpg
Try \`$name --help' for more information.
EOF
exit 1
fi
# make dirs
mkdir -p $dir/thumbs
mkdir -p $dir/lq
mkdir -p $dir/comments
chmod o+w $dir/comments
[ $mq -gt 0 ] && mkdir -p $dir/mq
[ $hq -gt 0 ] && mkdir -p $dir/hq
[ $zip -gt 0 ] && mkdir -p $dir/zip
# Protect info.txt, even if we don't make it.
echo "<Files info.txt>" > $dir/.htaccess
echo " deny from all" >> $dir/.htaccess
echo "</Files>" >> $dir/.htaccess
$verbose "Generating O.R.I.G.I.N.A.L gallery in $dir"
files=$(echo $@ | sed 's/ /\n/g' | sort)
#files=$@
i=1
for imagefile in $files; do
good_file "$imagefile"
if [ $? != 0 ]; then
$verbose "$imagefile is not a JPG, JPEG or PNG file, skipped"
continue
fi
$verbose -n "converting $imagefile "
$verbose -n "."
$convertor -geometry 120x120 -modulate 100,140,100 -unsharp 1x20 \
-quality 60 $extra_opts "$imagefile" $dir/thumbs/img-$i.jpg
$verbose -n "."
$convertor -geometry 640x480 -modulate 100,130,100 -unsharp 1x5 \
-quality 90 "$imagefile" $dir/lq/img-$i.jpg
if [ $mq -gt 0 ]; then
$verbose -n "."
$convertor -geometry 1024x768 -modulate 100,130,100 -unsharp 1x5 \
-quality 80 "$imagefile" $dir/mq/img-$i.jpg
fi
if [ $hq -gt 0 ] ; then
$verbose -n "."
cp "$imagefile" $dir/hq/img-$i.jpg
fi
# template for comment
echo "<span>Photo $i</span>
" > $dir/comments/$i.txt
i=`expr $i + 1`
$verbose " done"
done
# auto-rotate stuff
if [ $rotate -gt 0 ]; then
$verbose "rotating"
jhead -autorot $dir/thumbs/*.jpg
jhead -autorot $dir/lq/*.jpg
[ $mq ] && jhead -autorot $dir/mq/*.jpg
[ $hq ] && jhead -autorot $dir/hq/*.jpg
fi
#�zip stuff
if [ $zip -gt 0 ]; then
$verbose "archiving"
[ $mq ] && zip -R $dir/zip/mq.zip $dir/mq/*.jpg
[ $hq ] && zip -R $dir/zip/hq.zip $dir/hq/*.jpg
fi
#info.txt
protect=n
if [ $interactive == 1 ]; then
echo -n "Gallery name [$gal_name]: "
read gal_name
echo -n "Description: "
read gal_desc
echo -n "Author [$gal_auth]: "
read gal_auth
echo -n "Date [$gal_date]: "
read gal_date
echo -n "Resctrict access ? [y/N]: "
read protect
if [ "$protect" == "y" ] || [ "$protect" == "Y" ]; then
echo -n "restricted user [$gal_user]: "
read gal_user
echo -n "restricted password [$gal_pass]: "
read gal_pass
fi
fi
[ "$gal_name" != "" ] && echo "name|$gal_name" >> $dir/info.txt
[ "$gal_auth" != "" ] && echo "author|$gal_auth" >> $dir/info.txt
[ "$gal_date" != "" ] && echo "date|$gal_date" >> $dir/info.txt
[ "$gal_desc" != "" ] && echo "description|$gal_desc" >> $dir/info.txt
[ "$gal_user" != "" ] && echo "restricted_user|$gal_user" >> $dir/info.txt
[ "$gal_pass" != "" ] && echo "restricted_password|$gal_pass" >> $dir/info.txt
|