67 lines
1.9 KiB
C
67 lines
1.9 KiB
C
/*
|
|
* 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;
|
|
}
|