diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/generators.c | 5 | ||||
| -rw-r--r-- | src/jpeg-utils.cpp | 35 | ||||
| -rw-r--r-- | src/jpeg-utils.h | 5 |
3 files changed, 45 insertions, 0 deletions
diff --git a/src/generators.c b/src/generators.c index 1d05eea..5fe87fe 100644 --- a/src/generators.c +++ b/src/generators.c @@ -707,6 +707,11 @@ write_html_image (TGallerySetup *setup, if (exif == NULL) log_error ("write_html_image: error getting exif data from file \"%s\"\n", img_dst); } + /* Test for basic EXIF keys presence */ + if (exif != NULL && exif_has_key (exif, EXIF_APERTURE) && + exif_has_key (exif, EXIF_FOCAL_LENGTH) && + exif_has_key (exif, EXIF_EXPOSURE)) + g_hash_table_replace (defines, g_strdup ("HAS_EXIF"), g_strdup ("")); /* Retrieve image sizes of preview and original image */ get_image_sizes (img_dst, &img_w, &img_h, setup->autorotate); diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp index 031ecc0..389b8e4 100644 --- a/src/jpeg-utils.cpp +++ b/src/jpeg-utils.cpp @@ -197,6 +197,41 @@ get_exif_data_fixed (ExifData *exif, const gchar *key) return get_exif_data (exif, key); } +/* + * Returns TRUE if the image contains the key specified + */ +gboolean +exif_has_key (ExifData *exif, const gchar *key) +{ + g_return_val_if_fail (exif != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + + try { + if (g_strcmp0 (key, JPEG_COMMENT) == 0) { + return (! exif->image->comment().empty()); + } + + if (g_str_has_prefix (key, "Exif.")) { + Exiv2::ExifData &exifData = exif->image->exifData(); + if (! exifData.empty()) { + return (! exifData[key].toString().empty()); + } + } + + if (g_str_has_prefix (key, "Iptc.")) { + Exiv2::IptcData &iptcData = exif->image->iptcData(); + if (! iptcData.empty()) { + return (! iptcData[key].toString().empty()); + } + } + + return FALSE; + } + catch (...) { + return FALSE; + } +} + static void autorotate_image (MagickWand *magick_wand) diff --git a/src/jpeg-utils.h b/src/jpeg-utils.h index 05a6a49..7cec3a7 100644 --- a/src/jpeg-utils.h +++ b/src/jpeg-utils.h @@ -62,6 +62,11 @@ void exif_data_free (ExifData *data); gchar * get_exif_data (ExifData *exif, const gchar *key); gchar * get_exif_data_fixed (ExifData *exif, const gchar *key); +/* + * Returns TRUE if the image contains the key specified + */ +gboolean exif_has_key (ExifData *exif, const gchar *key); + /* * resize_image: resize image pointed by src and save result to dst |
