gthumb r2261 - in trunk: . libgthumb
- From: mjc svn gnome org
- To: svn-commits-list gnome org
- Subject: gthumb r2261 - in trunk: . libgthumb
- Date: Wed, 6 Feb 2008 18:58:37 +0000 (GMT)
Author: mjc
Date: Wed Feb 6 18:58:36 2008
New Revision: 2261
URL: http://svn.gnome.org/viewvc/gthumb?rev=2261&view=rev
Log:
2008-02-06 Michael J. Chudobiak <mjc svn gnome org>
* libgthumb/gth-exiv2-utils.cpp:
Added checks for mandatory exif tags when saving.
Modified:
trunk/ChangeLog
trunk/libgthumb/comments.c
trunk/libgthumb/gth-exiv2-utils.cpp
Modified: trunk/libgthumb/comments.c
==============================================================================
--- trunk/libgthumb/comments.c (original)
+++ trunk/libgthumb/comments.c Wed Feb 6 18:58:36 2008
@@ -434,8 +434,8 @@
file = file_data_new (uri, NULL);
file_data_update_all (file, FALSE);
- add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[COMMENT_TAG_NAMES][0], data->comment);
- add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[LOCATION_TAG_NAMES][0], data->place);
+ add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[COMMENT_TAG_NAMES][0], data->comment);
+ add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[LOCATION_TAG_NAMES][0], data->place);
localtime_r (&data->time, &tm);
buf = g_strdup_printf ("%04d:%02d:%02d %02d:%02d:%02d ",
Modified: trunk/libgthumb/gth-exiv2-utils.cpp
==============================================================================
--- trunk/libgthumb/gth-exiv2-utils.cpp (original)
+++ trunk/libgthumb/gth-exiv2-utils.cpp Wed Feb 6 18:58:36 2008
@@ -345,7 +345,12 @@
GthMetadata *new_entry;
/* skip blank values */
- if ((formatted_value == NULL) || (formatted_value[0] == '\0'))
+ if ((formatted_value == NULL) ||
+ (formatted_value[0] == '\0') ||
+ (formatted_value[0] == '\n') ||
+ (formatted_value[0] == '\r') ||
+ (formatted_value[0] == '\t') ||
+ (formatted_value[0] == ' '))
return metadata;
new_entry = g_new (GthMetadata, 1);
@@ -534,6 +539,27 @@
}
+static void
+mandatory_int (Exiv2::ExifData &checkdata,
+ const char *tag,
+ int value)
+{
+ Exiv2::ExifKey key = Exiv2::ExifKey(tag);
+ if (checkdata.findKey(key) == checkdata.end())
+ checkdata[tag] = value;
+}
+
+
+static void
+mandatory_string (Exiv2::ExifData &checkdata,
+ const char *tag,
+ const char *value)
+{
+ Exiv2::ExifKey key = Exiv2::ExifKey(tag);
+ if (checkdata.findKey(key) == checkdata.end())
+ checkdata[tag] = value;
+}
+
extern "C"
void
write_metadata (const char *from_file,
@@ -557,21 +583,6 @@
if (g_str_has_prefix (metadatum->full_name, "Exif")) {
Exiv2::ExifData &md = image1->exifData();
md[metadatum->full_name] = metadatum->raw_value;
-
- // TODO: add any missing mandatory tags. Required:
- // XResolution (default = 72)
- // YResolution (default = 72)
- // ResolutionUnit (default = 2)
- // YCbCrPositioning (default = 1)
- // Exif IFD Pointer (auto-generated?)
- // ExifVersion (always 2.21)
- // ComponentsConfiguration (defaut = "1 2 3 0")
- // FlashpixVersion (always 1.00)
- // ColorSpace (always 1)
- // PixelXDimension (update based on actual image)
- // PixelYDimension (update based on actual image)
-
- // Also: update DateTime?
}
else if (g_str_has_prefix (metadatum->full_name, "Iptc")) {
Exiv2::IptcData &md = image1->iptcData();
@@ -591,6 +602,18 @@
// anyways.
image1->exifData().eraseThumbnail();
+ // Mandatory tags
+ mandatory_int (image1->exifData(), "Exif.Image.XResolution", 72);
+ mandatory_int (image1->exifData(), "Exif.Image.YResolution", 72);
+ mandatory_int (image1->exifData(), "Exif.Image.ResolutionUnit", 2);
+ mandatory_int (image1->exifData(), "Exif.Image.YCbCrPositioning", 1);
+ mandatory_int (image1->exifData(), "Exif.Photo.ColorSpace", 1);
+ mandatory_string (image1->exifData(), "Exif.Photo.ExifVersion", "48 50 50 49");
+ mandatory_string (image1->exifData(), "Exif.Photo.ComponentsConfiguration", "1 2 3 0");
+ mandatory_string (image1->exifData(), "Exif.Photo.FlashpixVersion", "48 49 48 48");
+
+ // TODO: update PixelX/YDimension, DateTime
+
// Open second image (in many applications, this will actually
// be the same as the the first image (i.e., updating a file
// in-place.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]