mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-04 01:43:24 +00:00
plug-ins: load metadata via libheif and disable rotation dialog
This commit is contained in:
parent
6b86bb72f0
commit
183cb49b1e
1 changed files with 104 additions and 106 deletions
|
@ -103,6 +103,8 @@ static GimpValueArray * heif_av1_save (GimpProcedure *pro
|
|||
#endif
|
||||
|
||||
static GimpImage * load_image (GFile *file,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataLoadFlags *flags,
|
||||
gboolean interactive,
|
||||
GimpPDBStatusType *status,
|
||||
GError **error);
|
||||
|
@ -442,7 +444,7 @@ heif_load (GimpProcedure *procedure,
|
|||
heif_init (NULL);
|
||||
#endif
|
||||
|
||||
image = load_image (file, interactive, &status, &error);
|
||||
image = load_image (file, metadata, flags, interactive, &status, &error);
|
||||
|
||||
#if LIBHEIF_HAVE_VERSION(1,13,0)
|
||||
heif_deinit ();
|
||||
|
@ -837,6 +839,8 @@ nclx_to_gimp_profile (const struct heif_color_profile_nclx *nclx)
|
|||
|
||||
GimpImage *
|
||||
load_image (GFile *file,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataLoadFlags *flags,
|
||||
gboolean interactive,
|
||||
GimpPDBStatusType *status,
|
||||
GError **error)
|
||||
|
@ -1267,6 +1271,7 @@ load_image (GFile *file,
|
|||
|
||||
g_object_unref (buffer);
|
||||
|
||||
if (metadata)
|
||||
{
|
||||
size_t exif_data_size = 0;
|
||||
uint8_t *exif_data = NULL;
|
||||
|
@ -1275,14 +1280,12 @@ load_image (GFile *file,
|
|||
gint n_metadata;
|
||||
heif_item_id metadata_id;
|
||||
|
||||
n_metadata =
|
||||
heif_image_handle_get_list_of_metadata_block_IDs (handle,
|
||||
"Exif",
|
||||
n_metadata = heif_image_handle_get_list_of_metadata_block_IDs (handle, "Exif",
|
||||
&metadata_id, 1);
|
||||
if (n_metadata > 0)
|
||||
{
|
||||
exif_data_size = heif_image_handle_get_metadata_size (handle,
|
||||
metadata_id);
|
||||
exif_data_size = heif_image_handle_get_metadata_size (handle, metadata_id);
|
||||
|
||||
exif_data = g_alloca (exif_data_size);
|
||||
|
||||
err = heif_image_handle_get_metadata (handle, metadata_id, exif_data);
|
||||
|
@ -1293,18 +1296,15 @@ load_image (GFile *file,
|
|||
}
|
||||
}
|
||||
|
||||
n_metadata =
|
||||
heif_image_handle_get_list_of_metadata_block_IDs (handle,
|
||||
"mime",
|
||||
n_metadata = heif_image_handle_get_list_of_metadata_block_IDs (handle, "mime",
|
||||
&metadata_id, 1);
|
||||
if (n_metadata > 0)
|
||||
{
|
||||
if (g_strcmp0 (
|
||||
heif_image_handle_get_metadata_content_type (handle, metadata_id),
|
||||
"application/rdf+xml") == 0)
|
||||
if (g_strcmp0 (heif_image_handle_get_metadata_content_type (handle, metadata_id), "application/rdf+xml")
|
||||
== 0)
|
||||
{
|
||||
xmp_data_size = heif_image_handle_get_metadata_size (handle,
|
||||
metadata_id);
|
||||
xmp_data_size = heif_image_handle_get_metadata_size (handle, metadata_id);
|
||||
|
||||
xmp_data = g_alloca (xmp_data_size);
|
||||
|
||||
err = heif_image_handle_get_metadata (handle, metadata_id, xmp_data);
|
||||
|
@ -1318,8 +1318,7 @@ load_image (GFile *file,
|
|||
|
||||
if (exif_data || xmp_data)
|
||||
{
|
||||
GimpMetadata *metadata = gimp_metadata_new ();
|
||||
GimpMetadataLoadFlags flags = GIMP_METADATA_LOAD_COMMENT | GIMP_METADATA_LOAD_RESOLUTION;
|
||||
gexiv2_metadata_clear (GEXIV2_METADATA (metadata));
|
||||
|
||||
if (exif_data)
|
||||
{
|
||||
|
@ -1361,22 +1360,21 @@ load_image (GFile *file,
|
|||
|
||||
if (xmp_data)
|
||||
{
|
||||
if (!gimp_metadata_set_from_xmp (metadata, xmp_data, xmp_data_size, error))
|
||||
if (! gimp_metadata_set_from_xmp (metadata, xmp_data, xmp_data_size, error))
|
||||
{
|
||||
g_printerr ("%s: Failed to set XMP metadata: %s\n", G_STRFUNC, (*error)->message);
|
||||
g_clear_error (error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gexiv2_metadata_try_set_orientation (GEXIV2_METADATA (metadata),
|
||||
GEXIV2_ORIENTATION_NORMAL, NULL);
|
||||
gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata),
|
||||
width, NULL);
|
||||
gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata), width, NULL);
|
||||
gexiv2_metadata_try_set_metadata_pixel_height (GEXIV2_METADATA (metadata),
|
||||
height, NULL);
|
||||
gimp_image_metadata_load_finish (image, "image/heif",
|
||||
metadata, flags);
|
||||
}
|
||||
|
||||
*flags = GIMP_METADATA_LOAD_COMMENT | GIMP_METADATA_LOAD_RESOLUTION;
|
||||
}
|
||||
|
||||
if (profile)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue