| /* |
| * libexif example program to extract an EXIF thumbnail from an image |
| * and save it into a new file. |
| * |
| * Placed into the public domain by Dan Fandrich |
| */ |
| |
| #include <stdio.h> |
| #include <libexif/exif-loader.h> |
| |
| int main(int argc, char **argv) |
| { |
| int rc = 1; |
| ExifLoader *l; |
| |
| if (argc < 2) { |
| printf("Usage: %s image.jpg\n", argv[0]); |
| printf("Extracts a thumbnail from the given EXIF image.\n"); |
| return rc; |
| } |
| |
| /* Create an ExifLoader object to manage the EXIF loading process */ |
| l = exif_loader_new(); |
| if (l) { |
| ExifData *ed; |
| |
| /* Load the EXIF data from the image file */ |
| exif_loader_write_file(l, argv[1]); |
| |
| /* Get a pointer to the EXIF data */ |
| ed = exif_loader_get_data(l); |
| |
| /* The loader is no longer needed--free it */ |
| exif_loader_unref(l); |
| l = NULL; |
| if (ed) { |
| /* Make sure the image had a thumbnail before trying to write it */ |
| if (ed->data && ed->size) { |
| FILE *thumb; |
| char thumb_name[1024]; |
| |
| /* Try to create a unique name for the thumbnail file */ |
| snprintf(thumb_name, sizeof(thumb_name), |
| "%s_thumb.jpg", argv[1]); |
| |
| thumb = fopen(thumb_name, "wb"); |
| if (thumb) { |
| /* Write the thumbnail image to the file */ |
| fwrite(ed->data, 1, ed->size, thumb); |
| fclose(thumb); |
| printf("Wrote thumbnail to %s\n", thumb_name); |
| rc = 0; |
| } else { |
| printf("Could not create file %s\n", thumb_name); |
| rc = 2; |
| } |
| } else { |
| printf("No EXIF thumbnail in file %s\n", argv[1]); |
| rc = 1; |
| } |
| /* Free the EXIF data */ |
| exif_data_unref(ed); |
| } |
| } |
| return rc; |
| } |