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