diff options
Diffstat (limited to '')
-rw-r--r-- | pdb/groups/image_color_profile.pdb | 327 |
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; |