• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
main(int argc,char ** argv)11 int 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