X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=.config%2FGIMP%2F2.10%2Fplug-ins%2Fplugin-resynth-enlarge.py;fp=.config%2FGIMP%2F2.10%2Fplug-ins%2Fplugin-resynth-enlarge.py;h=774fdb6bafdcfa7e67e52aaa8f3e2b9b7a608f83;hb=4d07c77cf4d78cab8639e13ddc3c22495e585b0b;hp=0000000000000000000000000000000000000000;hpb=b3950616b54221c40a7dab9099bda675007e5b6e;p=dotfiles%2F.git diff --git a/.config/GIMP/2.10/plug-ins/plugin-resynth-enlarge.py b/.config/GIMP/2.10/plug-ins/plugin-resynth-enlarge.py new file mode 100755 index 00000000..774fdb6b --- /dev/null +++ b/.config/GIMP/2.10/plug-ins/plugin-resynth-enlarge.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +''' +Gimp plugin "Enlarge and resynthesize" + +Author: +lloyd konneker +Based on smart_enlarge.scm 2000 by Paul Harrison. + +Version: +1.0 lloyd konneker lkk 2010 Initial version in python. + +License: + +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 2 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. + +The GNU Public License is available at +http://www.gnu.org/copyleft/gpl.html +''' + +from gimpfu import * + +gettext.install("resynthesizer", gimp.locale_directory, unicode=True) + +def plugin_main(image, drawable, scale_factor): + ''' + Algorithm: + + Scale image up. + Resynthesize with: + corpus = original size image + in map = original size image but scaled up and down to blur + out map = scaled up image + + This restores the detail that scaling up looses. + It maintains the aspect ratio of all image features. + + Unlike the original smart-enlarge.scm, this alters the original image. + + original did not accept an alpha channel + ''' + + + temp_image1 = pdb.gimp_image_duplicate(image) # duplicate for in map + if not temp_image1: + raise RuntimeError, "Failed duplicate image" + temp_image2 = pdb.gimp_image_duplicate(image) # duplicate for corpus + if not temp_image2: + raise RuntimeError, "Failed duplicate image" + temp_layer1 = pdb.gimp_image_get_active_layer(temp_image1) + if not temp_layer1: + raise RuntimeError, "Failed get active layer" + temp_layer2 = pdb.gimp_image_get_active_layer(temp_image2) + if not temp_layer2: + raise RuntimeError, "Failed get active layer" + + # scale input map down and back, to blur + width = pdb.gimp_drawable_width(drawable) + height = pdb.gimp_drawable_height(drawable) + pdb.gimp_image_scale(temp_image1, width/scale_factor, height/scale_factor) + pdb.gimp_image_scale(temp_image1, width, height) + + # scale up the image + pdb.gimp_image_scale(image, width * scale_factor, height*scale_factor) + + # Resynthesize to restore details. + # Note there should not be a selection. TODO + pdb.plug_in_resynthesizer( + image, + drawable, + 0, 0, 0, + temp_layer2.ID, # corpus + temp_layer1.ID, # input map + drawable.ID, # output map is scaled up original itself + 1.0, 0.117, 8, 500) + + pdb.gimp_image_delete(temp_image1) + pdb.gimp_image_delete(temp_image2) + + +if __name__ == "__main__" : + register( + "python_fu_enlarge_resynthesized", + N_("Enlarge image and synthesize to sharpen."), + "Requires separate resynthesizer plugin", + "Lloyd Konneker", + "Copyright 2000 Paul Harrison, 2010 Lloyd Konneker", + "2010", + N_("Enlarge & sharpen..."), + "RGB*, GRAY*", + [ + (PF_IMAGE, "image", "Input image", None), + (PF_DRAWABLE, "drawable", "Input drawable", None), + (PF_ADJUSTMENT, "scale_factor", _("Scale by:"), 2, (1, 32, 0.1)) + ], + [], + plugin_main, + menu="/Filters/Enhance", + domain=("resynthesizer", gimp.locale_directory) + ) + + main() + +