plug-ins: load metadata via libheif and disable rotation dialog

This commit is contained in:
Daniel Novomeský 2023-11-06 15:03:19 +01:00
parent 6b86bb72f0
commit 183cb49b1e

View file

@ -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)