mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-10-06 01:12:40 +02:00
Compare commits
1 Commits
142b79b728
...
alxsa-psd-
Author | SHA1 | Date | |
---|---|---|---|
|
03864c6d63 |
@@ -326,6 +326,7 @@ load_image (GFile *file,
|
||||
/* Loading metadata for external file formats */
|
||||
GimpImage *
|
||||
load_image_metadata (GFile *file,
|
||||
GFile *layer_file,
|
||||
gint data_length,
|
||||
GimpImage *image,
|
||||
gboolean for_layers,
|
||||
@@ -367,7 +368,7 @@ load_image_metadata (GFile *file,
|
||||
initialize_unsupported (unsupported_features);
|
||||
img_a.unsupported_features = unsupported_features;
|
||||
|
||||
if (! for_layers)
|
||||
if (! for_layers || layer_file)
|
||||
{
|
||||
PSDimageres res_a;
|
||||
|
||||
@@ -389,12 +390,24 @@ load_image_metadata (GFile *file,
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (for_layers)
|
||||
{
|
||||
PSDlayer **lyr_a = NULL;
|
||||
gchar sig[4];
|
||||
gchar key[4];
|
||||
|
||||
if (input)
|
||||
g_object_unref (input);
|
||||
|
||||
/* Convert layer metadata file to input stream */
|
||||
input = G_INPUT_STREAM (g_file_read (layer_file, NULL, error));
|
||||
if (! input)
|
||||
{
|
||||
g_object_unref (input);
|
||||
return image;
|
||||
}
|
||||
|
||||
if (psd_read (input, &sig, 4, error) < 4)
|
||||
{
|
||||
g_object_unref (input);
|
||||
@@ -2750,7 +2763,8 @@ add_layers (GimpImage *image,
|
||||
g_array_free (parent_group_stack, FALSE);
|
||||
|
||||
/* Set the selected layers */
|
||||
gimp_image_take_selected_layers (image, selected_layers);
|
||||
if (selected_layers)
|
||||
gimp_image_take_selected_layers (image, selected_layers);
|
||||
g_list_free (img_a->layer_selection);
|
||||
|
||||
return 0;
|
||||
|
@@ -31,6 +31,7 @@ GimpImage * load_image (GFile *file,
|
||||
|
||||
GimpImage * load_image_metadata
|
||||
(GFile *file,
|
||||
GFile *layer_file,
|
||||
gint data_length,
|
||||
GimpImage *image,
|
||||
gboolean for_layers,
|
||||
|
@@ -315,7 +315,14 @@ psd_create_procedure (GimpPlugIn *plug_in,
|
||||
"If the metadata contains image or "
|
||||
"layer PSD resources.",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE);
|
||||
GIMP_PARAM_READWRITE);
|
||||
gimp_procedure_add_file_argument (procedure, "layer-file",
|
||||
"Layer file",
|
||||
"File containing layer metadata "
|
||||
"(if supported)",
|
||||
GIMP_FILE_CHOOSER_ACTION_OPEN,
|
||||
FALSE, NULL,
|
||||
G_PARAM_READWRITE);
|
||||
gimp_procedure_add_boolean_argument (procedure, "cmyk",
|
||||
"CMYK",
|
||||
"If the layer metadata needs to be "
|
||||
@@ -493,9 +500,10 @@ psd_load_metadata (GimpProcedure *procedure,
|
||||
GimpImage *image;
|
||||
gint data_length;
|
||||
PSDSupport unsupported_features;
|
||||
gboolean is_layer = FALSE;
|
||||
gboolean is_cmyk = FALSE;
|
||||
GError *error = NULL;
|
||||
GFile *layer_file = NULL;
|
||||
gboolean is_layer = FALSE;
|
||||
gboolean is_cmyk = FALSE;
|
||||
GError *error = NULL;
|
||||
|
||||
gegl_init (NULL, NULL);
|
||||
|
||||
@@ -504,11 +512,12 @@ psd_load_metadata (GimpProcedure *procedure,
|
||||
"image", &image,
|
||||
"size", &data_length,
|
||||
"metadata-type", &is_layer,
|
||||
"layer-file", &layer_file,
|
||||
"cmyk", &is_cmyk,
|
||||
NULL);
|
||||
|
||||
image = load_image_metadata (file, data_length, image, is_layer, is_cmyk,
|
||||
&unsupported_features, &error);
|
||||
image = load_image_metadata (file, layer_file, data_length, image, is_layer,
|
||||
is_cmyk, &unsupported_features, &error);
|
||||
|
||||
/* Check for unsupported layers */
|
||||
|
||||
|
@@ -1769,13 +1769,16 @@ load_image (GimpProcedure *procedure,
|
||||
gimp_image_undo_enable (*image);
|
||||
}
|
||||
|
||||
/* Load Photoshop layer metadata */
|
||||
/* Load Photoshop image and layer metadata */
|
||||
if (TIFFGetField (tif, TIFFTAG_PHOTOSHOP, &photoshop_len, &photoshop_data))
|
||||
{
|
||||
FILE *fp;
|
||||
GFile *temp_file = NULL;
|
||||
GimpProcedure *procedure;
|
||||
GimpValueArray *return_vals = NULL;
|
||||
FILE *fp;
|
||||
guchar *ps_layer_data;
|
||||
gint ps_layer_len;
|
||||
GFile *temp_file = NULL;
|
||||
GFile *layer_temp_file = NULL;
|
||||
GimpValueArray *return_vals = NULL;
|
||||
|
||||
temp_file = gimp_temp_file ("tmp");
|
||||
fp = g_fopen (g_file_peek_path (temp_file), "wb");
|
||||
@@ -1791,66 +1794,49 @@ load_image (GimpProcedure *procedure,
|
||||
fwrite (photoshop_data, sizeof (guchar), photoshop_len, fp);
|
||||
fclose (fp);
|
||||
|
||||
procedure = gimp_pdb_lookup_procedure (gimp_get_pdb (),
|
||||
"file-psd-load-metadata");
|
||||
return_vals = gimp_procedure_run (procedure,
|
||||
"run-mode", GIMP_RUN_NONINTERACTIVE,
|
||||
"file", temp_file,
|
||||
"size", photoshop_len,
|
||||
"image", *image,
|
||||
"metadata-type", FALSE,
|
||||
NULL);
|
||||
|
||||
g_file_delete (temp_file, NULL, NULL);
|
||||
g_object_unref (temp_file);
|
||||
gimp_value_array_unref (return_vals);
|
||||
|
||||
*ps_metadata_loaded = TRUE;
|
||||
}
|
||||
|
||||
if (TIFFGetField (tif, TIFFTAG_IMAGESOURCEDATA, &photoshop_len, &photoshop_data))
|
||||
{
|
||||
FILE *fp;
|
||||
GFile *temp_file = NULL;
|
||||
GimpProcedure *procedure;
|
||||
GimpValueArray *return_vals = NULL;
|
||||
|
||||
/* Photoshop metadata starts with 'Adobe Photoshop Document Data Block'
|
||||
* so we need to skip past that for the data. */
|
||||
photoshop_data += 36;
|
||||
photoshop_len -= 36;
|
||||
|
||||
temp_file = gimp_temp_file ("tmp");
|
||||
fp = g_fopen (g_file_peek_path (temp_file), "wb");
|
||||
|
||||
if (! fp)
|
||||
/* Check if we also have layer metadata */
|
||||
if (TIFFGetField (tif, TIFFTAG_IMAGESOURCEDATA, &ps_layer_len,
|
||||
&ps_layer_data))
|
||||
{
|
||||
g_message (_("Error trying to open temporary %s file '%s' "
|
||||
"for tiff metadata loading: %s"),
|
||||
"tmp", gimp_file_get_utf8_name (temp_file),
|
||||
g_strerror (errno));
|
||||
/* Photoshop metadata starts with 'Adobe Photoshop Document Data
|
||||
* Block' so we need to skip past that for the data. */
|
||||
ps_layer_data += 36;
|
||||
ps_layer_len -= 36;
|
||||
|
||||
layer_temp_file = gimp_temp_file ("tmp");
|
||||
fp = g_fopen (g_file_peek_path (layer_temp_file), "wb");
|
||||
|
||||
if (! fp)
|
||||
{
|
||||
g_message (_("Error trying to open temporary %s file '%s' "
|
||||
"for tiff metadata loading: %s"),
|
||||
"tmp", gimp_file_get_utf8_name (layer_temp_file),
|
||||
g_strerror (errno));
|
||||
}
|
||||
|
||||
fwrite (ps_layer_data, sizeof (guchar), ps_layer_len, fp);
|
||||
fclose (fp);
|
||||
}
|
||||
|
||||
fwrite (photoshop_data, sizeof (guchar), photoshop_len, fp);
|
||||
fclose (fp);
|
||||
|
||||
procedure = gimp_pdb_lookup_procedure (gimp_get_pdb (),
|
||||
"file-psd-load-metadata");
|
||||
/* We would like to use run_mode below. That way we could show a dialog
|
||||
* when unsupported Photoshop data is detected in interactive mode.
|
||||
* However, in interactive mode saved config values take precedence over
|
||||
* these values set below, so that won't work. */
|
||||
return_vals = gimp_procedure_run (procedure,
|
||||
"run-mode", GIMP_RUN_NONINTERACTIVE,
|
||||
"file", temp_file,
|
||||
"layer-file", layer_temp_file,
|
||||
"size", photoshop_len,
|
||||
"image", *image,
|
||||
"metadata-type", TRUE,
|
||||
"metadata-type", (layer_temp_file != NULL),
|
||||
"cmyk", is_cmyk,
|
||||
NULL);
|
||||
|
||||
g_file_delete (temp_file, NULL, NULL);
|
||||
g_object_unref (temp_file);
|
||||
if (layer_temp_file)
|
||||
{
|
||||
g_file_delete (layer_temp_file, NULL, NULL);
|
||||
g_object_unref (layer_temp_file);
|
||||
}
|
||||
gimp_value_array_unref (return_vals);
|
||||
|
||||
*ps_metadata_loaded = TRUE;
|
||||
|
Reference in New Issue
Block a user