Author: post
Date: 2010-12-18 18:42:33 +0100 (Sat, 18 Dec 2010)
New Revision: 3680
Modified:
trunk/librawstudio/rs-exif.cc
trunk/librawstudio/rs-exif.h
trunk/plugins/output-jpegfile/output-jpegfile.c
trunk/plugins/output-pngfile/output-pngfile.c
trunk/plugins/output-tifffile/output-tifffile.c
Log:
Don't guess file types when copying EXIF, but pass as parameter, and only add
XMP EXIF to PNG.
Modified: trunk/librawstudio/rs-exif.cc
===================================================================
--- trunk/librawstudio/rs-exif.cc 2010-12-12 19:15:44 UTC (rev 3679)
+++ trunk/librawstudio/rs-exif.cc 2010-12-18 17:42:33 UTC (rev 3680)
@@ -171,7 +171,7 @@
}
void
-rs_exif_add_to_file(RS_EXIF_DATA *d, Exiv2::IptcData &iptc_data, const gchar
*filename)
+rs_exif_add_to_file(RS_EXIF_DATA *d, Exiv2::IptcData &iptc_data, const gchar
*filename, RSExifFileType type)
{
if (!d)
return;
@@ -189,7 +189,8 @@
#endif
/* Set new metadata on output image and save */
- image->setExifData(*data);
+ if (type != RS_EXIF_FILE_TYPE_PNG)
+ image->setExifData(*data);
image->setIptcData(iptc_data);
image->writeMetadata();
}
@@ -275,6 +276,14 @@
static void
rs_add_tags_iptc(Exiv2::IptcData &iptc_data, const gchar *input_filename,
uint16_t format)
{
+ /* Add overall tags */
+ iptc_data["Iptc.Envelope.CharacterSet"] = "UTF-8";
+ iptc_data["Iptc.Application2.Program"] = "Rawstudio";
+ iptc_data["Iptc.Application2.ProgramVersion"] = VERSION;
+ iptc_data["Iptc.Envelope.ModelVersion"] = 42;
+ iptc_data["Iptc.Envelope.FileFormat"] = format;
+
+ /* Add tags */
RSLibrary *lib = rs_library_get_singleton();
GList *tags = rs_library_photo_tags(lib, input_filename, FALSE);
if (!tags || g_list_length(tags) == 0)
@@ -288,12 +297,6 @@
g_free(tags->data);
} while (tags = tags->next);
- iptc_data["Iptc.Envelope.CharacterSet"] = "UTF-8";
- iptc_data["Iptc.Application2.Program"] = "Rawstudio";
- iptc_data["Iptc.Application2.ProgramVersion"] = VERSION;
- iptc_data["Iptc.Envelope.ModelVersion"] = 42;
- iptc_data["Iptc.Envelope.FileFormat"] = format;
-
/* When we some day can access this information, enable this */
#if 0
enum {
@@ -325,10 +328,10 @@
}
gboolean
-rs_exif_copy(const gchar *input_filename, const gchar *output_filename, const
gchar *color_space)
+rs_exif_copy(const gchar *input_filename, const gchar *output_filename, const
gchar *color_space, RSExifFileType type)
{
/* Exiv2 prior to v0.20.0 cannot add tags to TIFF images without
corrupting them */
- if (g_str_has_suffix(output_filename, "tiff") ||
g_str_has_suffix(output_filename, "tif"))
+ if (RS_EXIF_FILE_TYPE_TIFF == type)
if (Exiv2::versionNumber() < 0x1400)
return FALSE;
@@ -341,11 +344,11 @@
return FALSE;
rs_add_cs_to_exif(exif, color_space);
rs_add_tags_exif(exif, input_filename);
- if (g_str_has_suffix(output_filename, "jpg"))
+ if (RS_EXIF_FILE_TYPE_JPEG == type)
rs_add_tags_iptc(iptc_data, input_filename, 11);
- if (g_str_has_suffix(output_filename, "tiff") ||
g_str_has_suffix(output_filename, "tif"))
+ if (RS_EXIF_FILE_TYPE_TIFF == type)
rs_add_tags_iptc(iptc_data, input_filename, 3);
- rs_exif_add_to_file(exif, iptc_data, output_filename);
+ rs_exif_add_to_file(exif, iptc_data, output_filename, type);
rs_exif_free(exif);
return TRUE;
}
Modified: trunk/librawstudio/rs-exif.h
===================================================================
--- trunk/librawstudio/rs-exif.h 2010-12-12 19:15:44 UTC (rev 3679)
+++ trunk/librawstudio/rs-exif.h 2010-12-18 17:42:33 UTC (rev 3680)
@@ -27,13 +27,20 @@
#include <glib.h>
#include <rawstudio.h>
+typedef enum {
+ RS_EXIF_FILE_TYPE_UNKNOWN,
+ RS_EXIF_FILE_TYPE_JPEG,
+ RS_EXIF_FILE_TYPE_PNG,
+ RS_EXIF_FILE_TYPE_TIFF
+} RSExifFileType;
+
typedef void RS_EXIF_DATA;
typedef void RS_IPTC_DATA;
extern RS_EXIF_DATA *rs_exif_load_from_file(const gchar *);
extern RS_EXIF_DATA *rs_exif_load_from_rawfile(RAWFILE *rawfile);
extern void rs_exif_free(RS_EXIF_DATA *d);
-extern gboolean rs_exif_copy(const gchar *input_filename, const gchar
*output_filename, const gchar *color_space);
+extern gboolean rs_exif_copy(const gchar *input_filename, const gchar
*output_filename, const gchar *color_space, RSExifFileType type);
#ifdef __cplusplus
}
Modified: trunk/plugins/output-jpegfile/output-jpegfile.c
===================================================================
--- trunk/plugins/output-jpegfile/output-jpegfile.c 2010-12-12 19:15:44 UTC
(rev 3679)
+++ trunk/plugins/output-jpegfile/output-jpegfile.c 2010-12-18 17:42:33 UTC
(rev 3680)
@@ -278,7 +278,7 @@
gchar *input_filename = NULL;
rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
- rs_exif_copy(input_filename, jpegfile->filename,
G_OBJECT_TYPE_NAME(jpegfile->color_space));
+ rs_exif_copy(input_filename, jpegfile->filename,
G_OBJECT_TYPE_NAME(jpegfile->color_space), RS_EXIF_FILE_TYPE_JPEG);
g_free(input_filename);
return(TRUE);
Modified: trunk/plugins/output-pngfile/output-pngfile.c
===================================================================
--- trunk/plugins/output-pngfile/output-pngfile.c 2010-12-12 19:15:44 UTC
(rev 3679)
+++ trunk/plugins/output-pngfile/output-pngfile.c 2010-12-18 17:42:33 UTC
(rev 3680)
@@ -260,7 +260,7 @@
gchar *input_filename = NULL;
rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
- rs_exif_copy(input_filename, pngfile->filename,
G_OBJECT_TYPE_NAME(pngfile->color_space));
+ rs_exif_copy(input_filename, pngfile->filename,
G_OBJECT_TYPE_NAME(pngfile->color_space), RS_EXIF_FILE_TYPE_PNG);
g_free(input_filename);
return TRUE;
Modified: trunk/plugins/output-tifffile/output-tifffile.c
===================================================================
--- trunk/plugins/output-tifffile/output-tifffile.c 2010-12-12 19:15:44 UTC
(rev 3679)
+++ trunk/plugins/output-tifffile/output-tifffile.c 2010-12-18 17:42:33 UTC
(rev 3680)
@@ -277,7 +277,7 @@
gchar *input_filename = NULL;
rs_filter_get_recursive(filter, "filename", &input_filename, NULL);
- rs_exif_copy(input_filename, tifffile->filename,
G_OBJECT_TYPE_NAME(tifffile->color_space));
+ rs_exif_copy(input_filename, tifffile->filename,
G_OBJECT_TYPE_NAME(tifffile->color_space), RS_EXIF_FILE_TYPE_TIFF);
g_free(input_filename);
return(TRUE);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit