1/*
2 * libexif example program to extract an EXIF thumbnail from an image
3 * and save it into a new file.
4 *
5 * Placed into the public domain by Dan Fandrich
6 */
7
8#include <stdio.h>
9#include <libexif/exif-loader.h>
10
11int main(int argc, char **argv)
12{
13    int rc = 1;
14    ExifLoader *l;
15
16    if (argc < 2) {
17        printf("Usage: %s image.jpg\n", argv[0]);
18        printf("Extracts a thumbnail from the given EXIF image.\n");
19        return rc;
20    }
21
22    /* Create an ExifLoader object to manage the EXIF loading process */
23    l = exif_loader_new();
24    if (l) {
25        ExifData *ed;
26
27        /* Load the EXIF data from the image file */
28        exif_loader_write_file(l, argv[1]);
29
30        /* Get a pointer to the EXIF data */
31        ed = exif_loader_get_data(l);
32
33	/* The loader is no longer needed--free it */
34        exif_loader_unref(l);
35	l = NULL;
36        if (ed) {
37	    /* Make sure the image had a thumbnail before trying to write it */
38            if (ed->data && ed->size) {
39                FILE *thumb;
40                char thumb_name[1024];
41
42		/* Try to create a unique name for the thumbnail file */
43                snprintf(thumb_name, sizeof(thumb_name),
44                         "%s_thumb.jpg", argv[1]);
45
46                thumb = fopen(thumb_name, "wb");
47                if (thumb) {
48		    /* Write the thumbnail image to the file */
49                    fwrite(ed->data, 1, ed->size, thumb);
50                    fclose(thumb);
51                    printf("Wrote thumbnail to %s\n", thumb_name);
52                    rc = 0;
53                } else {
54                    printf("Could not create file %s\n", thumb_name);
55                    rc = 2;
56                }
57            } else {
58                printf("No EXIF thumbnail in file %s\n", argv[1]);
59                rc = 1;
60            }
61	    /* Free the EXIF data */
62            exif_data_unref(ed);
63        }
64    }
65    return rc;
66}
67