mirror of https://github.com/GNOME/gimp.git
libgimp: new gimp_image_metadata_save_filter API
This new function is an alternative to existing gimp_image_metadata_save_finish, when you want to save metadata yourself and you need only filtering processing. It returns filtered metadata allowing the caller to save the finalized metadata via other means (via native format’s library for example) This API can be used to support metadata saving of image formats not directly supported by gexiv2/exiv2.
This commit is contained in:
parent
55f4177815
commit
ff87bc8d4d
|
@ -452,6 +452,7 @@ EXPORTS
|
|||
gimp_image_metadata_load_finish
|
||||
gimp_image_metadata_load_prepare
|
||||
gimp_image_metadata_load_thumbnail
|
||||
gimp_image_metadata_save_filter
|
||||
gimp_image_metadata_save_finish
|
||||
gimp_image_metadata_save_prepare
|
||||
gimp_image_new
|
||||
|
|
|
@ -519,33 +519,38 @@ gimp_image_metadata_set_xmp_structs (GList *xmp_list,
|
|||
}
|
||||
|
||||
/**
|
||||
* gimp_image_metadata_save_finish:
|
||||
* gimp_image_metadata_save_filter:
|
||||
* @image: The actually saved image
|
||||
* @mime_type: The saved file's mime-type
|
||||
* @metadata: The metadata to write to @file
|
||||
* @metadata: The metadata to export
|
||||
* @flags: Flags to specify what of the metadata to save
|
||||
* @file: The file @image was saved to
|
||||
* @file: The file @image was saved to or NULL if file was not saved yet
|
||||
* @error: Return location for error message
|
||||
*
|
||||
* Saves the @metadata retrieved from the image with
|
||||
* gimp_image_metadata_save_prepare() to @file, taking into account
|
||||
* the passed @flags.
|
||||
* Filters the @metadata retrieved from the image with
|
||||
* gimp_image_metadata_save_prepare(),
|
||||
* taking into account the passed @flags.
|
||||
*
|
||||
* Note that the @image passed to this function might be different
|
||||
* from the image passed to gimp_image_metadata_save_prepare(), due
|
||||
* to whatever file export conversion happened in the meantime
|
||||
*
|
||||
* Returns: Whether the save was successful.
|
||||
* This is an alternative to gimp_image_metadata_save_finish when you
|
||||
* want to save metadata yourself and you need only filtering processing.
|
||||
*
|
||||
* Since: 2.10
|
||||
* Returns: Filtered metadata or NULL in case of failure.
|
||||
*
|
||||
* Use g_object_unref() when returned metadata are no longer needed
|
||||
*
|
||||
* Since: 3.0
|
||||
*/
|
||||
gboolean
|
||||
gimp_image_metadata_save_finish (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataSaveFlags flags,
|
||||
GFile *file,
|
||||
GError **error)
|
||||
GimpMetadata *
|
||||
gimp_image_metadata_save_filter (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataSaveFlags flags,
|
||||
GFile *file,
|
||||
GError **error)
|
||||
{
|
||||
GimpMetadata *new_metadata;
|
||||
GExiv2Metadata *new_g2metadata;
|
||||
|
@ -558,28 +563,33 @@ gimp_image_metadata_save_finish (GimpImage *image,
|
|||
gboolean support_exif;
|
||||
gboolean support_xmp;
|
||||
gboolean support_iptc;
|
||||
gboolean success = FALSE;
|
||||
gint i;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||
g_return_val_if_fail (mime_type != NULL, FALSE);
|
||||
g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
|
||||
g_return_val_if_fail (G_IS_FILE (file), FALSE);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
|
||||
g_return_val_if_fail (mime_type != NULL, NULL);
|
||||
g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), NULL);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
||||
|
||||
if (! (flags & (GIMP_METADATA_SAVE_EXIF |
|
||||
GIMP_METADATA_SAVE_XMP |
|
||||
GIMP_METADATA_SAVE_IPTC |
|
||||
GIMP_METADATA_SAVE_THUMBNAIL)))
|
||||
return TRUE;
|
||||
return NULL;
|
||||
|
||||
/* read metadata from saved file */
|
||||
new_metadata = gimp_metadata_load_from_file (file, error);
|
||||
new_g2metadata = GEXIV2_METADATA (new_metadata);
|
||||
if (file)
|
||||
{
|
||||
/* read metadata from saved file */
|
||||
new_metadata = gimp_metadata_load_from_file (file, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_metadata = gimp_metadata_new ();
|
||||
}
|
||||
|
||||
if (! new_metadata)
|
||||
return FALSE;
|
||||
return NULL;
|
||||
|
||||
new_g2metadata = GEXIV2_METADATA (new_metadata);
|
||||
support_exif = gexiv2_metadata_get_supports_exif (new_g2metadata);
|
||||
support_xmp = gexiv2_metadata_get_supports_xmp (new_g2metadata);
|
||||
support_iptc = gexiv2_metadata_get_supports_iptc (new_g2metadata);
|
||||
|
@ -842,6 +852,60 @@ gimp_image_metadata_save_finish (GimpImage *image,
|
|||
/* nothing to do, blah blah */
|
||||
}
|
||||
|
||||
return new_metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_image_metadata_save_finish:
|
||||
* @image: The actually saved image
|
||||
* @mime_type: The saved file's mime-type
|
||||
* @metadata: The metadata to write to @file
|
||||
* @flags: Flags to specify what of the metadata to save
|
||||
* @file: The file @image was saved to
|
||||
* @error: Return location for error message
|
||||
*
|
||||
* Saves the @metadata retrieved from the image with
|
||||
* gimp_image_metadata_save_prepare() to @file, taking into account
|
||||
* the passed @flags.
|
||||
*
|
||||
* Note that the @image passed to this function might be different
|
||||
* from the image passed to gimp_image_metadata_save_prepare(), due
|
||||
* to whatever file export conversion happened in the meantime
|
||||
*
|
||||
* Returns: Whether the save was successful.
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gboolean
|
||||
gimp_image_metadata_save_finish (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataSaveFlags flags,
|
||||
GFile *file,
|
||||
GError **error)
|
||||
{
|
||||
GimpMetadata *new_metadata;
|
||||
gboolean success = FALSE;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||
g_return_val_if_fail (mime_type != NULL, FALSE);
|
||||
g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
|
||||
g_return_val_if_fail (G_IS_FILE (file), FALSE);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
|
||||
if (! (flags & (GIMP_METADATA_SAVE_EXIF |
|
||||
GIMP_METADATA_SAVE_XMP |
|
||||
GIMP_METADATA_SAVE_IPTC |
|
||||
GIMP_METADATA_SAVE_THUMBNAIL)))
|
||||
return TRUE;
|
||||
|
||||
new_metadata = gimp_image_metadata_save_filter (image, mime_type, metadata,
|
||||
flags, file, error);
|
||||
if (! new_metadata)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
success = gimp_metadata_save_to_file (new_metadata, file, error);
|
||||
|
||||
g_object_unref (new_metadata);
|
||||
|
|
|
@ -43,6 +43,12 @@ void gimp_image_metadata_load_finish (GimpImage *image,
|
|||
GimpMetadata * gimp_image_metadata_save_prepare (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadataSaveFlags *suggested_flags);
|
||||
GimpMetadata * gimp_image_metadata_save_filter (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataSaveFlags flags,
|
||||
GFile *file,
|
||||
GError **error);
|
||||
gboolean gimp_image_metadata_save_finish (GimpImage *image,
|
||||
const gchar *mime_type,
|
||||
GimpMetadata *metadata,
|
||||
|
|
Loading…
Reference in New Issue