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