summaryrefslogtreecommitdiffstats
path: root/pdb/groups/image_transform.pdb
diff options
context:
space:
mode:
Diffstat (limited to 'pdb/groups/image_transform.pdb')
-rw-r--r--pdb/groups/image_transform.pdb276
1 files changed, 276 insertions, 0 deletions
diff --git a/pdb/groups/image_transform.pdb b/pdb/groups/image_transform.pdb
new file mode 100644
index 0000000..81845a3
--- /dev/null
+++ b/pdb/groups/image_transform.pdb
@@ -0,0 +1,276 @@
+# 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_resize {
+ $blurb = 'Resize the image to the specified extents.';
+
+ $help = <<'HELP';
+This procedure resizes the image so that it's new width and height are
+equal to the supplied parameters. Offsets are also provided which
+describe the position of the previous image's content. All channels
+within the image are resized according to the specified parameters;
+this includes the image selection mask. All layers within the image
+are repositioned according to the specified offsets.
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image width' },
+ { name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image height' },
+ { name => 'offx', type => 'int32',
+ desc => 'x offset between upper left corner of old and
+ new images: (new - old)' },
+ { name => 'offy', type => 'int32',
+ desc => 'y offset between upper left corner of old and
+ new images: (new - old)' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-resize.h") ],
+ code => <<'CODE'
+{
+ gimp_image_resize (image, context,
+ new_width, new_height, offx, offy, NULL);
+}
+CODE
+ );
+}
+
+sub image_resize_to_layers {
+ $blurb = 'Resize the image to fit all layers.';
+
+ $help = <<'HELP';
+This procedure resizes the image to the bounding box of all layers of
+the image. All channels within the image are resized to the new size;
+this includes the image selection mask. All layers within the image
+are repositioned to the new image area.
+HELP
+
+ &simon_pdb_misc('2004', '2.2');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-resize.h") ],
+ code => <<'CODE'
+{
+ gimp_image_resize_to_layers (image, context, NULL, NULL, NULL, NULL, NULL);
+}
+CODE
+ );
+}
+
+sub image_scale {
+ $blurb = 'Scale the image using the default interpolation method.';
+
+ $help = <<'HELP';
+
+This procedure scales the image so that its new width and height are
+equal to the supplied parameters. All layers and channels within the
+image are scaled according to the specified parameters; this includes
+the image selection mask. The interpolation method used can be set
+with gimp_context_set_interpolation().
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image width' },
+ { name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image height' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-scale.h") ],
+ code => <<'CODE'
+{
+ GimpPDBContext *pdb_context = GIMP_PDB_CONTEXT (context);
+
+ if (progress)
+ gimp_progress_start (progress, FALSE, _("Scaling"));
+
+ gimp_image_scale (image, new_width, new_height,
+ pdb_context->interpolation,
+ progress);
+
+ if (progress)
+ gimp_progress_end (progress);
+}
+CODE
+ );
+}
+
+sub image_scale_full {
+ &std_pdb_deprecated('gimp-image-scale');
+ &neo_pdb_misc('2008', '2.6');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image width' },
+ { name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image height' },
+ { name => 'interpolation', type => 'enum GimpInterpolationType',
+ desc => 'Type of interpolation' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-scale.h") ],
+ code => <<'CODE'
+{
+ if (progress)
+ gimp_progress_start (progress, FALSE, _("Scaling"));
+
+ gimp_image_scale (image, new_width, new_height, interpolation, progress);
+
+ if (progress)
+ gimp_progress_end (progress);
+}
+CODE
+ );
+}
+
+sub image_crop {
+ $blurb = 'Crop the image to the specified extents.';
+
+ $help = <<'HELP';
+This procedure crops the image so that it's new width and height are
+equal to the supplied parameters. Offsets are also provided which
+describe the position of the previous image's content. All channels
+and layers within the image are cropped to the new image extents; this
+includes the image selection mask. If any parameters are out of range,
+an error is returned.
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image width: (0 < new_width <= width)' },
+ { name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
+ desc => 'New image height: (0 < new_height <= height)' },
+ { name => 'offx', type => '0 <= int32',
+ desc => 'X offset: (0 <= offx <= (width - new_width))' },
+ { name => 'offy', type => '0 <= int32',
+ desc => 'Y offset: (0 <= offy <= (height - new_height))' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-crop.h") ],
+ code => <<'CODE'
+{
+ if (new_width > gimp_image_get_width (image) ||
+ new_height > gimp_image_get_height (image) ||
+ offx > (gimp_image_get_width (image) - new_width) ||
+ offy > (gimp_image_get_height (image) - new_height))
+ success = FALSE;
+ else
+ gimp_image_crop (image, context, GIMP_FILL_TRANSPARENT,
+ offx, offy, new_width, new_height,
+ TRUE);
+}
+CODE
+ );
+}
+
+sub image_flip {
+ $blurb = 'Flips the image horizontally or vertically.';
+
+ $help = <<'HELP';
+This procedure flips (mirrors) the image.
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'flip_type',
+ type => 'enum GimpOrientationType (no GIMP_ORIENTATION_UNKNOWN)',
+ desc => 'Type of flip' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-flip.h") ],
+ code => <<'CODE'
+{
+ gimp_image_flip (image, context, flip_type, NULL);
+}
+CODE
+ );
+}
+
+sub image_rotate {
+ $blurb = 'Rotates the image by the specified degrees.';
+ $help = 'This procedure rotates the image.';
+
+ &mitch_pdb_misc('2003');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' },
+ { name => 'rotate_type', type => 'enum GimpRotationType',
+ desc => 'Angle of rotation' }
+ );
+
+ %invoke = (
+ headers => [ qw("core/gimpimage-rotate.h") ],
+ code => <<'CODE'
+{
+ if (progress)
+ gimp_progress_start (progress, FALSE, _("Rotating"));
+
+ gimp_image_rotate (image, context, rotate_type, progress);
+
+ if (progress)
+ gimp_progress_end (progress);
+}
+CODE
+ );
+}
+
+@headers = qw("core/gimpprogress.h"
+ "gimppdbcontext.h"
+ "gimp-intl.h");
+
+@procs = qw(image_resize image_resize_to_layers
+ image_scale image_scale_full
+ image_crop image_flip image_rotate);
+
+%exports = (app => [@procs], lib => [@procs]);
+
+$desc = 'Image Transform';
+$doc_title = 'gimpimagetransform';
+$doc_short_desc = 'Transformations on images.';
+$doc_long_desc = 'Operations to scale, resize, crop, flip and rotate images.';
+
+1;