aboutsummaryrefslogtreecommitdiff
path: root/convert/imgconv
blob: 396a7867920091a8473dec384a04373a9fd63d6e (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
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