summaryrefslogtreecommitdiffstats
path: root/pdb/groups/image_color_profile.pdb
diff options
context:
space:
mode:
Diffstat (limited to 'pdb/groups/image_color_profile.pdb')
-rw-r--r--pdb/groups/image_color_profile.pdb327
1 files changed, 327 insertions, 0 deletions
diff --git a/pdb/groups/image_color_profile.pdb b/pdb/groups/image_color_profile.pdb
new file mode 100644
index 0000000..f82e63a
--- /dev/null
+++ b/pdb/groups/image_color_profile.pdb
@@ -0,0 +1,327 @@
+# GIMP - The GNU Image Manipulation Program
+# Copyright (C) 1995 Spencer Kimball and Peter Mattis
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# "Perlized" from C source by Manish Singh <yosh@gimp.org>
+
+sub image_get_color_profile {
+ $blurb = "Returns the image's color profile";
+
+ $help = <<'HELP';
+This procedure returns the image's color profile, or NULL if the image
+has no color profile assigned.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'profile_data', type => 'int8array', wrap => 1,
+ desc => "The image's serialized color profile. The returned value must be freed with g_free()",
+ array => { name => 'num_bytes',
+ desc => 'Number of bytes in the color_profile array' } }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpColorProfile *profile;
+
+ profile = gimp_image_get_color_profile (image);
+
+ if (profile)
+ {
+ const guint8 *data;
+ gsize length;
+
+ data = gimp_color_profile_get_icc_profile (profile, &length);
+
+ profile_data = g_memdup (data, length);
+ num_bytes = length;
+ }
+}
+CODE
+ );
+}
+
+sub image_get_effective_color_profile {
+ $blurb = "Returns the color profile that is used for the image";
+
+ $help = <<'HELP';
+This procedure returns the color profile that is actually used for
+this image, which is the profile returned by
+gimp_image_get_color_profile() if the image has a profile assigned, or
+a generated default RGB or grayscale profile, according to the image's type.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'profile_data', type => 'int8array', wrap => 1,
+ desc => "The image's serialized color profile. The returned value must be freed with g_free()",
+ array => { name => 'num_bytes',
+ desc => 'Number of bytes in the color_profile array' } }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpColorProfile *profile;
+
+ profile = gimp_color_managed_get_color_profile (GIMP_COLOR_MANAGED (image));
+
+ if (profile)
+ {
+ const guint8 *data;
+ gsize length;
+
+ data = gimp_color_profile_get_icc_profile (profile, &length);
+
+ profile_data = g_memdup (data, length);
+ num_bytes = length;
+ }
+}
+CODE
+ );
+}
+
+sub image_set_color_profile {
+ $blurb = "Sets the image's color profile";
+
+ $help = <<'HELP';
+This procedure sets the image's color profile, or unsets it if NULL is
+passed as 'color_profile'. This procedure does no color conversion.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'color_profile', type => 'int8array', wrap => 1,
+ desc => 'The new serialized color profile',
+ array => { name => 'num_bytes',
+ desc => 'Number of bytes in the color_profile array' } }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (color_profile)
+ {
+ GimpColorProfile *profile;
+
+ profile = gimp_color_profile_new_from_icc_profile (color_profile,
+ num_bytes,
+ error);
+
+ if (profile)
+ {
+ success = gimp_image_set_color_profile (image, profile, error);
+ g_object_unref (profile);
+ }
+ else
+ success = FALSE;
+ }
+ else
+ {
+ success = gimp_image_set_color_profile (image, NULL, error);
+ }
+}
+CODE
+ );
+}
+
+sub image_set_color_profile_from_file {
+ $blurb = "Sets the image's color profile from an ICC file";
+
+ $help = <<'HELP';
+This procedure sets the image's color profile from a file containing
+an ICC profile, or unsets it if NULL is passed as 'uri'. This
+procedure does no color conversion.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'uri', type => 'string',
+ desc => 'The URI of the file containing the new color profile' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (uri)
+ {
+ GFile *file = g_file_new_for_uri (uri);
+ GimpColorProfile *profile;
+
+ profile = gimp_color_profile_new_from_file (file, error);
+
+ if (profile)
+ {
+ success = gimp_image_set_color_profile (image, profile, error);
+ g_object_unref (profile);
+ }
+ else
+ success = FALSE;
+
+ g_object_unref (file);
+ }
+ else
+ {
+ success = gimp_image_set_color_profile (image, NULL, error);
+ }
+}
+CODE
+ );
+}
+
+sub image_convert_color_profile {
+ $blurb = "Convert the image's layers to a color profile";
+
+ $help = <<'HELP';
+This procedure converts from the image's color profile (or the default
+RGB or grayscale profile if none is set) to the given color profile. Only
+RGB and grayscale color profiles are accepted, according to the image's
+type.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'color_profile', type => 'int8array', wrap => 1,
+ desc => 'The serialized color profile',
+ array => { name => 'num_bytes',
+ desc => 'Number of bytes in the color_profile array' } },
+ { name => 'intent', type => 'enum GimpColorRenderingIntent',
+ desc => 'Rendering intent' },
+ { name => 'bpc', type => 'boolean',
+ desc => 'Black point compensation' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (color_profile)
+ {
+ GimpColorProfile *profile;
+
+ profile = gimp_color_profile_new_from_icc_profile (color_profile,
+ num_bytes,
+ error);
+
+ if (profile)
+ {
+ success = gimp_image_convert_color_profile (image, profile,
+ intent, bpc,
+ progress, error);
+ g_object_unref (profile);
+ }
+ else
+ success = FALSE;
+ }
+ else
+ success = FALSE;
+}
+CODE
+ );
+}
+
+sub image_convert_color_profile_from_file {
+ $blurb = "Convert the image's layers to a color profile";
+
+ $help = <<'HELP';
+This procedure converts from the image's color profile (or the default
+RGB or grayscale profile if none is set) to an ICC profile specified by
+'uri'. Only RGB and grayscale color profiles are accepted, according to
+the image's type.
+HELP
+
+ &mitch_pdb_misc('2015', '2.10');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'uri', type => 'string',
+ desc => 'The URI of the file containing the new color profile' },
+ { name => 'intent', type => 'enum GimpColorRenderingIntent',
+ desc => 'Rendering intent' },
+ { name => 'bpc', type => 'boolean',
+ desc => 'Black point compensation' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ if (uri)
+ {
+ GFile *file = g_file_new_for_uri (uri);
+ GimpColorProfile *profile;
+
+ profile = gimp_color_profile_new_from_file (file, error);
+
+ if (profile)
+ {
+ success = gimp_image_convert_color_profile (image, profile,
+ intent, bpc,
+ progress, error);
+ g_object_unref (profile);
+ }
+ else
+ success = FALSE;
+
+ g_object_unref (file);
+ }
+ else
+ success = FALSE;
+}
+CODE
+ );
+}
+
+@headers = qw(<cairo.h>
+ "libgimpcolor/gimpcolor.h"
+ "core/gimpimage-color-profile.h"
+ "gimp-intl.h");
+
+@procs = qw(image_get_color_profile
+ image_get_effective_color_profile
+ image_set_color_profile
+ image_set_color_profile_from_file
+ image_convert_color_profile
+ image_convert_color_profile_from_file);
+
+%exports = (app => [@procs], lib => [@procs]);
+
+$desc = 'Image Color Profile';
+$doc_title = 'gimpimagecolorprofile';
+$doc_short_desc = 'Operations on an image\'s color profile.';
+$doc_long_desc = 'Operations on an image\'s color profile.';
+
+1;