rjhead 2.88.1 → 2.88.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,140 +0,0 @@
1
- //--------------------------------------------------------------------------------
2
- // Module to do path manipulation for file moving of jhead.
3
- //
4
- // Matthias Wandel Feb 2 2009
5
- //--------------------------------------------------------------------------------
6
- #include <stdio.h>
7
- #include <stdlib.h>
8
- #include <string.h>
9
- #include <errno.h>
10
- #include <ctype.h>
11
- #include <ctype.h>
12
- #include <sys/stat.h>
13
- #ifdef _WIN32
14
- #include <direct.h> // for mkdir under windows.
15
- #define mkdir(dir,mode) mkdir(dir)
16
- #define S_ISDIR(a) (a & _S_IFDIR)
17
- #endif
18
-
19
- #include "jhead.h"
20
-
21
- //--------------------------------------------------------------------------------
22
- // Ensure that a path exists
23
- //--------------------------------------------------------------------------------
24
- int EnsurePathExists(const char * FileName)
25
- {
26
- char NewPath[PATH_MAX*2];
27
- int a;
28
- int LastSlash = 0;
29
-
30
- //printf("\nEnsure exists:%s\n",FileName);
31
-
32
- // Extract the path component of the file name.
33
- strcpy(NewPath, FileName);
34
- a = strlen(NewPath);
35
- for (;;){
36
- a--;
37
- if (a == 0){
38
- NewPath[0] = 0;
39
- break;
40
- }
41
- if (NewPath[a] == SLASH){
42
- struct stat dummy;
43
- NewPath[a] = 0;
44
- if (stat(NewPath, &dummy) == 0){
45
- if (S_ISDIR(dummy.st_mode)){
46
- // Break out of loop, and go forward along path making
47
- // the directories.
48
- if (LastSlash == 0){
49
- // Full path exists. No need to create any directories.
50
- return 1;
51
- }
52
- break;
53
- }else{
54
- // Its a file.
55
- fprintf(stderr,"Can't create path '%s' due to file conflict\n",NewPath);
56
- return 0;
57
- }
58
- }
59
- if (LastSlash == 0) LastSlash = a;
60
- }
61
- }
62
-
63
- // Now work forward.
64
- //printf("Existing First dir: '%s' a = %d\n",NewPath,a);
65
-
66
- for(;FileName[a];a++){
67
- if (FileName[a] == SLASH || a == 0){
68
- if (a == LastSlash) break;
69
- NewPath[a] = FileName[a];
70
- //printf("make dir '%s'\n",NewPath);
71
- #ifdef _WIN32
72
- if (NewPath[1] == ':' && strlen(NewPath) == 2) continue;
73
- #endif
74
- if (mkdir(NewPath,0777)){
75
- fprintf(stderr,"Could not create directory '%s'\n",NewPath);
76
- // Failed to create directory.
77
- return 0;
78
- }
79
- }
80
- }
81
- return 1;
82
- }
83
-
84
- //--------------------------------------------------------------------------------
85
- // Make a new path out of a base path, and a filename.
86
- // Basepath is the base path, and FilePath is a filename, or path + filename.
87
- //--------------------------------------------------------------------------------
88
- void CatPath(char * BasePath, const char * FilePath)
89
- {
90
- int l;
91
- l = strlen(BasePath);
92
-
93
- if (FilePath[1] == ':'){
94
- // Its a windows absolute path.
95
- l = 0;
96
- }
97
-
98
- if (FilePath[0] == SLASH || FilePath[0] == '.' || l == 0){
99
- // Its an absolute path, or there was no base path.
100
- strcpy(BasePath, FilePath);
101
- return;
102
- }
103
-
104
- if (BasePath[l-1] != SLASH){
105
- BasePath[l++] = SLASH;
106
- BasePath[l] = 0;
107
- }
108
-
109
- strcat(BasePath, FilePath);
110
-
111
- // Note that the combined path may contains things like "foo/../bar". We assume
112
- // that the filesystem will take care of these.
113
- }
114
-
115
- /*
116
-
117
- char Path1[] = "ztest\\cdir\\foo.jpg";
118
- char Path2[] = "zxtest\\cdir\\foo.jpg";
119
- char Path3[] = "\\tzest\\cdir\\foo.jpg";
120
-
121
- char BasePath[100];
122
-
123
- main()
124
- {
125
- EnsurePathExists(Path1);
126
- EnsurePathExists(Path2);
127
- EnsurePathExists(Path3);
128
-
129
-
130
-
131
-
132
- CatPath(BasePath, "hello.txt");
133
- CatPath(BasePath, "world\\hello.txt");
134
- CatPath(BasePath, "\\hello.txt");
135
- CatPath(BasePath, "c:\\hello.txt");
136
- CatPath(BasePath, "c:\\world\\hello.txt");
137
- CatPath(BasePath, "c:\\abresl\\hello.txt");
138
-
139
- }
140
- */
@@ -1,60 +0,0 @@
1
-
2
- Some notes:
3
-
4
- When I first wrote Jhead back in 1999, there wasn't much software around
5
- for looking inside Exif headers, so I wrote jhead for that task. Since
6
- then, a lot of much more sophisticated programs for looking inside Exif
7
- headers have been written, many with GUIs, and features that Jhead lacks.
8
-
9
- Seeing that Jhead does everything I need it to do, My goal is not to have
10
- every feature imaginable. Rather, I want Jhead to be a small, simple,
11
- easy to understand program. My goal is that if you need to understand
12
- Exif internals, or add Exif capability to your program, Jhead is the
13
- place to cut and paste code from.
14
-
15
- As a result, Jhead may not have your pet feature. Feel free to add your
16
- pet feature to Jhead - its meant to be hacked. If you send me your
17
- changes, I might integrate it, but only if its simple.
18
-
19
- If you find that it dies on a certain jpeg file, send it to me, and I
20
- will look at it.
21
-
22
-
23
- Compiling:
24
-
25
- Windows:
26
-
27
- Make sure visual C is on your path (I use version 6 from 1998,
28
- but it shouldn't matter much).
29
- Run the batch file make.bat
30
-
31
- Linux & Unices:
32
-
33
- type 'make'.
34
-
35
- Portability:
36
-
37
- Although I have never done so myself, people tell me it compiles
38
- under platforms as diverse as such as Mac OS-X, or NetBSD on Mac68k.
39
- Jhead doesn't care about the endian-ness of your CPU, and should not
40
- have problems with processors that do not handle unaligned data,
41
- such as ARM or Alpha. The main portability problem is the use
42
- of C++ style '//' comments. This is intentional, and won't change.
43
-
44
- Jhead has also made its way into various Linux distributions and ports
45
- trees, so you might already have it on your system without knowing.
46
- Note that I am a windows weenie myself.
47
-
48
- License:
49
-
50
- Jhead is public domain software - that is, you can do whatever you want
51
- with it, and include it software that is licensed under the GNU or the
52
- BSD license, or whatever other licence you chose, including proprietary
53
- closed source licenses. Although not part of the license, I do expect
54
- common courtesy, please.
55
-
56
- If you do integrate the code into some software of yours, I'd appreciate
57
- knowing about it though.
58
-
59
- Matthias Wandel
60
-
@@ -1,469 +0,0 @@
1
- <html>
2
- <span style="font-family: helvetica,arial,sans-serif;">
3
-
4
- <h3>Jhead is a command line driven program for manipulating the non-image parts of Exif flavour
5
- JPEG files that most digital cameras produce.</h3><p>
6
-
7
- Windows / Mac users: Jhead has <b>no Graphical User Interface</b>. Clicking on it with the mouse from Windows
8
- or Mac OS-X won't do anything for you - you have to <b>use it from the Command prompt</b>
9
-
10
-
11
- <h3>Jhead v2.88 program Features</h3>
12
- <ul>
13
- <li>Extracting camera settings from Exif image files
14
- <li>Able to set and/or adjust the Exif time field
15
- <li>Manipulation (extract, replace, regenerate) of Exif integral thumbnails
16
- <li>Transplant Exif image header from one JPEG to another
17
- <li>Edit JPEG comment fields
18
- <li>Automatically rotate images upright (using jpegtran) according to "orientation" tag.
19
- <li>Manage running programs on large batches of Jpegs and restoring Exif header
20
- information afterwards.
21
- <li>Display embedded GPS info (if present)
22
- </ul>
23
-
24
-
25
- <h3>General metadata options</h3>
26
- <table cellpadding=5>
27
-
28
- <tr valign=top><td><b>-te &lt;name&gt;
29
- <td>
30
- Transplant Exif header from image &lt;name&gt; into specified image. This option is
31
- useful if you like to edit the photos but still want the Exif header on your photos.
32
- As most photo editing programs will wipe out the Exif header, this option can be used
33
- to re-transplant them back in after editing the photos.
34
- <br>
35
- This feature has an interesting 'relative path' option for specifying the thumbnail name.
36
- Whenever the &lt;name&gt; contains the characters '&i', jhead will substitute the original
37
- filename for this name. This allows creating a 'relative name' when doing a whole
38
- batch of files. For example, the incantation:
39
- <ul>jhead -te "originals\&i" *.jpg</ul>
40
- would transfer the Exif header for each .jpg file in the originals directory by the same name,
41
- Both Win32 and most UNIX shells treat the '&' character in a special way, so you have to
42
- put quotes around that command line option for the '&' to even be passed to the program.
43
-
44
-
45
- <tr valign=top><td><b>-dc
46
- <td>Delete comment field from the JPEG header. Note that the comment
47
- is not part of the Exif header.
48
-
49
- <tr valign=top><td><b>-de
50
- <td>Delete the Exif header entirely. This leaves other sections (IPTC, XMP, comment) intact
51
-
52
- <tr valign=top><td><b>-di
53
- <td>Delete IPTC section (if present). Leaves other sections intact.
54
-
55
- <tr valign=top><td><b>-dx
56
- <td>Delete XMP section (if present). Leaves other sections intact.
57
-
58
- <tr valign=top><td><b>-du
59
- <td>Delete any sections that jhead doesn't know about. Leaves Exif, XMP, IPTC and comment
60
- sections intact.
61
-
62
- <tr valign=top><td><b>-purejpg
63
- <td>Delete all JPEG sections that aren't necessary for rendering the image. Strips any
64
- metadata that various applications may have left in the image. A combination of
65
- the -de -dc and -du options.
66
-
67
- <tr valign=top><td><b>-mkexif
68
- <td>Creates minimal Exif header. Exif header contains date/time, and empty thumbnail
69
- fields only. Date/time set to file time by default.
70
- use with -rgt option if you want the Exif header to contain a thumbnail.
71
- Note that Exif header creation is very limited at this time, and no other fields
72
- can be added to the Exif header this way.
73
-
74
- <tr valign=top><td><b>-ce
75
- <td>Edit the JPEG header comment field (note, this comment field is outside the Exif structure
76
- and can be part of Exif and non Exif style JPEG images).
77
- <br>
78
- A temporary file containing the comment is created and a text editor is launched to edit
79
- the file. The editor is specified in the EDITOR environment variable. If none is specified
80
- notepad or vi are used under Windows and UNIX respectively. After the editor exits,
81
- the data is transferred back into the image, and the temporary file deleted.
82
-
83
- <tr valign=top><td><b>-cs &lt;name&gt;
84
- <td>Save comment section to a file
85
-
86
- <tr valign=top><td><b>-ci &lt;name&gt;
87
- <td>Replace comment with text from file.
88
-
89
- <tr valign=top><td><b>-cl&nbsp&lt;comment&gt;
90
- <td>Replace comment with comment from command line.
91
- </table>
92
-
93
-
94
- <h3>Date / Time manipulation options</h3>
95
- <table cellpadding=5>
96
-
97
- <tr valign=top><td><b>-ft
98
- <td>Sets the file's system time stamp to what is stored in the Exif header.
99
-
100
- <tr valign=top><td><b>-dsft
101
- <td>Sets the Exif timestamp to the file's timestamp. Requires an Exif header to pre-exist.
102
- Use -mkexif option to create one if needed.
103
-
104
- <tr valign=top><td><b>-n[&lt;fmt-string&gt;]
105
- <td>This option causes files to be renamed and/or moved according to the Exif header "DateTimeOriginal" field.
106
- If the file is not an Exif file, or the DateTimeOriginal does not contain a valid value,
107
- the file date is used.
108
- Renaming is by default restricted to files whose names consist largely of digits.
109
- This effectively restricts renaming to files that have not already been manually renamed, as
110
- the default sequential names from digital cameras consist largely of digits.
111
- Use the -nf option to force renaming of all files.
112
- <p>
113
- If the name includes '/' or '\' (under windows), this is interpreted as a new path for
114
- the file. If the new path does not exist, the path will be created.
115
- <p>
116
- If the [fmt-string] is omitted, the file will be renamed to MMDD-HHMMSS.
117
- <br>
118
- If a [fmt-string] is provided, the fmt-string will be passed to the
119
- strftime function for formatting. In addition, if the format string contains '%f', this will
120
- substitute the original name of the file (minus extension).
121
- <br>
122
- A sequence number may also be included by including '%i' in the format string. Leading
123
- zeros can be specified. '%03i' for example will pad the numbers to '001', '002'...
124
- this works just like printf in C, but with '%i' instead of '%d'.
125
- <br>
126
- If the target name already exists, the name will be appended with "a", "b", "c", etc,
127
- unless the name ends with a letter, in which case it will be appended with "0", "1", "2", etc.
128
- <br>
129
- This feature is especially useful if more than one digital camera was used to take pictures
130
- of an event. By renaming them to a scheme according to date, they will automatically
131
- appear in order of taking when viewed with some sort of viewer like Xnview or AcdSee, and
132
- sorted by name. Or you could use the -ft option and view the images sorted by date.
133
- Typically, one of the carera's date will be set not quite right, in which case you may have
134
- to use the -ta or -da options on those files first.
135
- <p>
136
- <b>Some of the more useful arguments for strftime are:</b>
137
-
138
- <table>
139
- <tr><td>%d &nbsp </td><td>Day of month as decimal number (01 � 31)
140
- <tr><td>%H</td><td>Hour in 24-hour format (00 � 23)
141
- <tr><td>%j</td><td>Day of year as decimal number (001 � 366)
142
- <tr><td>%m</td><td>Month as decimal number (01 � 12)
143
- <tr><td>%M</td><td>Minute as decimal number (00 � 59)
144
- <tr><td>%S</td><td>Second as decimal number (00 � 59)
145
- <tr><td>%U</td><td>Week of year as decimal number, with Sunday as first day of week (00 � 53)
146
- <tr><td>%w</td><td>Weekday as decimal number (0 � 6; Sunday is 0)
147
- <tr><td>%y</td><td>Year without century, as decimal number (00 � 99)
148
- <tr><td>%Y</td><td>Year with century, as decimal number
149
- </table>
150
- <p>
151
- Example:<br>
152
- &nbsp &nbsp jhead -n%Y%m%d-%H%M%S *.jpg<p>
153
- This will rename files matched by *.jpg according to YYYYMMDD-HHMMSS
154
- <p>
155
- Note to Windows batch file users: '%' is used to deliminate macros in Windows batch files. You must
156
- use %% to get one % passed to the program. So from a batch file, you would have to write "jhead -n%%Y%%m%%d-%%H%%M%%S *.jpg"
157
- <p>
158
- For a full listing of strftime arguments, look up the strftime function. Note that some arguments
159
- to the strftime function (not listed here) produce strings with characters such as '/' and ':' that
160
- may not be valid as part of a filename on various systems.
161
-
162
- <tr valign=top><td><b>-nf
163
- <td>Same as '-n' but renames files regardless of original file name.
164
-
165
- <tr valign=top><td><b>-a
166
- <td>(Windows only option). Rename files with the same name but different extension as well.
167
- This is useful for renaming .AVI files based on Exif file in .THM, or to rename sound annotation
168
- files or raw files with jpeg files. Use together with '-n' option.
169
-
170
- <tr valign=top><td><b>-ta&lt;timediff&gt;
171
- <td>Adjust time stored in the Exif header by h:mm backwards or forwards. Useful when having
172
- taken pictures with the wrong time set on the camera, such as after travelling across
173
- time zones, or when daylight savings time has changed.
174
- This option uses the time from the "DateTimeOriginal" (tag 0x9003) field, but sets
175
- all the time fields in the Exif header to the new value. Version 2.0 and earlier only
176
- modified the "DateTimeOriginal" (tag 0x9003) field, but too many people thought
177
- that that was a bug.
178
-
179
- Examples:<br>
180
- Adjust time one hour forward (you would use this after you forgot to set daylight savings
181
- time on the digicam)<br>
182
- <ul>jhead -ta+1:00 *.jpg</ul>
183
- Adjust time back by 23 seconds (you would use this to get the timestamps from two digicams
184
- in sync after you found that they didn't quite align)
185
- <ul>jhead -ta-0:00:23 *.jpg</ul>
186
- Adjust time forward by 2 days and 1 hour (49 hours)
187
- <ul>jhead -ta+49 *.jpg</ul>
188
-
189
- <tr valign=top><td><b>-da&lt;date&gt;-&lt;date&gt;
190
- <td>Works like -ta, but for specifying large date offsets, to be used when fixing dates from
191
- cameras where the date was set incorrectly, such as having date and time reset by battery
192
- removal on some cameras. This feature is best for adjusting dates on pictures taken
193
- over a large range of dates. For pictures all taken the same date, the "-ds" option
194
- is often easier to use.
195
- <p>
196
- Because different months and years have different numbers of days in them, a simple offset
197
- for months, days, years would lead to unexpected results at times. The time offset is
198
- thus specified as a difference between two dates, so that jhead can figure out exactly
199
- how many days the timestamp needs to be adjusted by, including leap years and daylight
200
- savings time changes.
201
- The dates are specified as yyyy:mm:dd. For sub-day adjustments, a time of day can also
202
- be included, by specifying yyyy:nn:dd/hh:mm or yyyy:mm:dd/hh:mm:ss
203
- <p>
204
- Examples:<br>
205
- Year on camera was set to 2005 instead of 2004 for pictures taken in April
206
- <ul>jhead -da2005:03:01-2004:03:01</ul>
207
- Default camera date is 2002:01:01, and date was reset on 2005:05:29 at 11:21 am
208
- <ul>jhead -da2005:05:29/11:21-2002:01:01</ul>
209
-
210
- <tr valign=top><td><b>-ts&lt;date-time&gt;
211
- <td>Sets the date and time stored in the Exif header to what is specified on the command line.
212
- This option changes all the date fields in the Exif header.
213
- Time must be specified as:<br>
214
- <font face=courier> &nbsp &nbsp yyyy:mm:dd-hh:mm:ss</font><p>
215
-
216
- <tr valign=top><td><b>-ds&lt;date-time&gt;
217
- <td>Sets the date stored in the Exif header to what is specified on the command line.
218
- Can be used to set date, just year and month, or just year.
219
- Date is specified as:<br>
220
- <font face=courier> &nbsp &nbsp yyyy:mm:dd, yyyy:mm, or yyyy</font><p>
221
-
222
- </table>
223
- <h3>Thumbnail manipulation options</h3>
224
- <table cellpadding=5>
225
- <tr valign=top><td><b>-dt
226
- <td>Delete thumbnails from the Exif header, but leave the
227
- interesting parts intact. This option truncates the thumbnail from the Exif header, provided
228
- that the thumbnail is the last part of the Exif header (which so far as I know is always the case).
229
- Exif headers have a built-in thumbnail, which is typically 240x160 and 10k in size.
230
- This thumbnail is used by digital cameras. Windows XP, as well
231
- as various photo viewing software may also use this thumbnail if present, but work just fine
232
- if it isn't.
233
-
234
- <tr valign=top><td><b>-st &lt;name&gt;
235
- <td>Save the built in thumbnail from Jpegs that came from a digital camera. The thumbnail lives
236
- inside the Exif header, and is a very low-res JPEG image. Note that making
237
- any changes to a photo, except for with some programs, generally wipes out the Exif header
238
- and with it the thumbnail.
239
- <br>
240
- I implemented this option because I kept getting asked about having such an option.
241
- I don't consider the
242
- built in thumbnails to be all that useful - too low res. However, now you can see for
243
- yourself. I always generate my thumbnails using ImageMagick (see end of this page).
244
- <br>
245
- Like the '-te' option, this feature has the 'relative path' option for specifying the
246
- thumbnail name.
247
- Whenever the &lt;name&gt; contains the characters '&i', jhead will substitute the original
248
- filename for this name. This allows creating a 'relative name' when doing a whole
249
- batch of files. For example, the incantation:
250
- <ul>jhead -st "thumbnails\&i" *.jpg</ul>
251
- would create a thumbnail for each .jpg file in the thumbnails directory by the same name,
252
- (provided that the thumbnails directory exists, of course).
253
- Both Win32 and most UNIX shells treat the '&' character in a special way, so you have to
254
- put quotes around that command line option for the '&' to even be passed to the program.
255
- <p>
256
- If a '-' is specified for the output file, the thumbnail is sent to stdout. (UNIX build only)
257
-
258
- <tr valign=top><td><b>-rt &lt;name&gt;
259
- <td>Replace thumbnails from the Exif header.
260
- This only works if the Exif header already contains an Exif header a thumbnail.
261
-
262
- <tr valign=top><td><b>-rgt[size]
263
- <td>Regnerate Exif thumbnail.
264
- 'size' specifies maximum height or width of thumbnail.
265
- I added this option because I had a lot of images that I had rotated with various tools that don't
266
- update the Exif header. But newer image browsers such as XnView make use of the Exif thumbnail,
267
- and so the thumbnails would be different from the image itself. Note that the rotation tag also
268
- needed to be cleared (-norot option).
269
- <br>
270
- Typically, only images that are shot in portrait orientation are afflicted with this. You can use
271
- the -orp option to tell jhead to only operate on images that are upright.
272
- <p>
273
-
274
- This option relies on 'mogrify' program (from ImageMagick) to regenerate the thumbnail.
275
- Linux users often already have this tool pre-installed. Windows users have to go and download it.
276
- This option only works if the image already contains a thumbail.
277
- </table>
278
-
279
- <h3>Rotation tag manipulation</h3>
280
- <table cellpadding=5>
281
- <tr valign=top>
282
- <td><b>-autorot
283
- <td>
284
- Using the 'Orientation' tag of the Exif header, rotate the image so that it is upright.
285
- The program 'jpegtran' is used to perform the rotation. This program is present in most
286
- Linux distributions. For windows, you need to get a copy of it.
287
- After rotation, the orientation tag of the Exif header is set to '1' (normal orientation).
288
- The Exif thumbnail is also rotated as of Jhead version 2.5. Other fields of the Exif header,
289
- including dimensions are untouched, but the JPEG height/width are adjusted.<br>
290
- This feature is especially useful with newer digital cameras, which set the orientation
291
- field in the Exif header automatically using a built in orientation sensor in the camera.
292
-
293
- <tr valign=top>
294
- <td><b>-norot
295
- <td>
296
- Clears the Exif header rotation tag without altering the image.
297
- You may find that your images have rotation tags in them from your camera, but you already
298
- rotated them with some lossless tool without clearing the rotation tag.
299
- Now your friendly browser rotates the images on you again because the image rotation
300
- tag still indicates the image should be rotated. Use this option to fix this problem.
301
- You may also want to regenerate the thumbnail using the -rgt option.
302
- </table>
303
-
304
-
305
- <h3>Output verbosity control</h3>
306
- <table cellpadding=5>
307
-
308
-
309
- <tr valign=top><td><b>-h
310
- <td>Displays summary of command line options.
311
-
312
- <tr valign=top><td><b>-v
313
- <td>Makes the program even more verbose than it already is. Like DOS programs, and unlike
314
- UNIX programs, Jhead gives feedback as to what it is doing, even when nothing goes wrong.
315
- Windows user that I am, when something doesn't give me feedback for 20 seconds, I assume
316
- its crashed.
317
-
318
- <tr valign=top><td><b>-q
319
- <td>Makes the progran mot spit out messages on success - more like the "Silence is golden" Unix way. its crashed.
320
-
321
- <tr valign=top><td><b>-V
322
- <td>Print version info and compilation date.
323
-
324
- <tr valign=top><td><b>-Exifmap
325
- <td>Show a map of the bytes in the Exif header. Useful when analyzing strange Exif headers,
326
- not of much use to non software developers.
327
-
328
- <tr valign=top><td><b>-se
329
- <td>Suppress error messages relating to corrupt Exif header structure.
330
-
331
- <tr valign=top><td><b>-c
332
- <td>Concise output. This causes picture info to be summarized on one line instead of several.
333
- Useful for grep-ing through images, as well as importing into spread sheets (data is space
334
- delimited with quotes as text qualifier).
335
-
336
- </table>
337
-
338
-
339
- <h3>File matching and selection</h3>
340
- <table cellpadding=5>
341
-
342
- <tr valign=top><td><b>-model
343
- <td>Restricts processing of files to those whose camera model, as indicated by the Exif image
344
- information, contains the substring specified in the argument after '-model'.
345
- For example, the following command will list only images that are from an S100 camera:
346
- <p>
347
- jhead -model S100 *.jpg<p>
348
- <p>
349
- I use this option to restrict my JPEG re-compressing to those images that came from my
350
- Cannon S100 digicam, (see the -cmd option).
351
-
352
- <tr valign=top>
353
- <td><b>-exonly
354
- <td>Skip all files that don't have an Exif header. This skips all files that did not
355
- come directly from the digital camera, as most photo editing software does not
356
- preserve the Exif header when saving pictures.
357
-
358
- <tr valign=top><td><b>-cmd&lt;command&gt;
359
- <td>Executes the specified command on each Jepg file to be processed.<p>
360
- The Exif section of each file is read before running the command, and re-inserted
361
- after the command finishes.
362
- <p>
363
- This is useful for using jhead's file globbing capability for processing a whole
364
- directory tree of files.
365
- <p>
366
- It's also useful for restoring the exif header after operatiosn that wipe out
367
- the Exif metadata. Most programs today however will keep the Exif metadata
368
- intact, so this is less important than it used to be.
369
-
370
- <tr valign=top><td><b>-orp -orl
371
- <td>Operate only on images with portrait (-orp) or landscape (-orl) aspect ratio.<br>
372
- Please note that this is solely based on jpeg width and height values. Some browsers may auto
373
- rotate the image on displaying it based on the Exif orientation tag, so that images shot
374
- in portrait mode are displayed as portrait. However, the image itself may not be stored in
375
- portrait orientation.
376
- The -autorot and -norot options are useful for dealing with rotation issues.
377
-
378
- <tr valign=top><td><b>-r
379
- <td>The recursive feature of version 1.0 never worked to my satisfaction, and I replaced it
380
- with my recursive file globbing code in the Windows version. See below.
381
-
382
- </table>
383
-
384
- <h3>Bugs and Shortcomings</h3>
385
- <ul>
386
- After jhead runs a program to rotate or resize an image, the image dimensions and thumbnail
387
- in the Exif header are not adjusted.
388
- <p>
389
- Modifying of Exif header data is very limited, as Jhead internally only has a read only
390
- implementation of the file system contained in the Exif header. For example, there is no way
391
- to replace the thumbnail or edit the Exif comment in the Exif header. There is also no way
392
- to create minimal Exif headers.
393
- <p>
394
-
395
- Most Canon digital SLR cameras fail to adjust the effective sensor resolution when shooting at less
396
- than full resolution, causing jhead to incorrectly miscalculate the sensor width and 35mm equivalent
397
- focal length. The same can result from resizing photos with Photoshop, which will manipulate
398
- parts of the Exif header.
399
- This is often reported as a bug in Jhead, but Jhead can't do much about incorrect data.
400
- </ul>
401
-
402
- <h3>Name globbing and recursive directories under Windows</h3>
403
- <ul>
404
- Name globbing means matching wildcard patterns to actual file names. If you know what this
405
- term means, you are probably annoyed at how programs on Windows typically handle this.
406
- The Win32 version of this program goes beyond the pattern matching that Windows provides,
407
- and allows you to specify fancy UNIX-like patterns such as:
408
- <p>
409
- <font size = 2 face="courier">&nbsp jhead c:\pix\199*\*\*.jpg</font>
410
- <p>
411
- This program goes one step beyond beyond that in that "**" as a path component means any
412
- level of subdirectories. The invocation
413
- <p>
414
- <font size = 2 face="courier">&nbsp jhead c:\**\*.jpg</font>
415
- <p>
416
- will find ALL Jpegs files on the c: drive, including those in the root directory.
417
- The <font size = 2 face="courier">**</font>
418
- only works if it is the only part of that path component. For example, the path
419
- <font size = 2 face="courier">'c:\a**\*.jpg'</font>
420
- will not recurse.
421
- The <font size = 2 face="courier">'**'</font>
422
- recursive expansion is ONLY supported on the Windows version. The code is in the module 'myglob.c',
423
- if you want to reuse it (I certainly intend to reuse that code for other applications).
424
- Under UNIX, the shell's wildcard expansion is
425
- pretty decent already, and dealing with the convoluted nature of some UNIX file layouts,
426
- doing better would have been much more of a challenge.
427
- </ul>
428
-
429
- <h3>Programs I use with Jhead</h3>
430
- <b>ImageMagick</b><br>
431
- <ul>
432
- I use the MOGIRIFY command from ImageMagick to do batch conversions and re-compresses of images.
433
- If you use Linux, you probably already have ImageMagick on your system (just type 'mogrify' at the
434
- command prompt to see if you have it). For Windows users, you have to download it from:
435
- <a href="http://www.imagemagick.org"> http://www.imagemagick.org</a><p>
436
- Image Magick is one of those programs that preserves comment and Exif headers, although older
437
- versions do not.
438
- </ul>
439
- <b>JPEGTRAN</b><br>
440
- <ul>
441
- If you use Linux you probably also already have this program. For windows, it's hard to find a
442
- pre-built binary on the web. The <a href="http://www.ijg.org"> Independent JPEG
443
- Group</a>'s website only has the source code.<p>
444
- There's a fancier version, with pre-built Windows binaries and a lossless cropping feature added at:
445
- <a href="http://sylvana.net/jpegcrop"> http://sylvana.net/jpegcrop</a>.
446
- </ul>
447
-
448
- <b>XnView</b><br>
449
- <ul>
450
- <a href="http://www.xnview.com">XnView</a> is an excellent, small, fast, and free graphical image browser.
451
- It makes use of jpeg thumbnails for the thumbnail view. On account of Xnview, I added
452
- options to fix or regenerate the thumbnails to jhead, so that I could regenerate the thumnails
453
- for images where the thumbnail had gotten out of sync with the image.
454
- <br>
455
- Mac and Linux versions of XnView are also available.
456
- </ul>
457
-
458
- <b>wrjpgcom / rdjpgcom</b><br>
459
- <ul>
460
- You can use these programs to write and extract COM markers from JPEG images respectively. Although I always
461
- use my jhead program for this feature, the wrjpgcom and rdjpgcom programs are extremely simple and very
462
- suitable for use with perl or shell scripts to process lots of images. These programs are part of most
463
- Linux distributions as part of the libjpg package (along with jpegtran)
464
- </ul>
465
- <p><br>
466
- Jhead homeage: <a href="http://www.sentex.net/~mwandel/jhead">http://www.sentex.net/~mwandel/jhead</a><br>
467
- Last Updated: Nov 06 2009
468
-
469
-