|  | 
|  | 1 | +; | 
|  | 2 | +; (gimp-layer-set-mode layer-base SCREEN-MODE) | 
|  | 3 | +; NORMAL-MODE 0 | 
|  | 4 | +; DISSOLVE-MODE 1 | 
|  | 5 | +; BEHIND-MODE 2 | 
|  | 6 | +; MULTIPLY-MODE 3 | 
|  | 7 | +; SCREEN-MODE 4 | 
|  | 8 | +; OVERLAY-MODE 5 | 
|  | 9 | +; DIFFERENCE 6 | 
|  | 10 | +; ADDITION-MODE 7 | 
|  | 11 | +; SUBTRACT-MODE 8 | 
|  | 12 | +; DARKEN-ONLY-MODE 9 | 
|  | 13 | +; LIGHTEN-ONLY-MODE10 | 
|  | 14 | +; HUE-MODE 11 | 
|  | 15 | +; SATURATION-MODE 12 | 
|  | 16 | +; COLOR-MODE 13 | 
|  | 17 | +; VALUE-MODE 14 | 
|  | 18 | +; DIVIDE-MODE 15 | 
|  | 19 | +; DODGE-MODE 16 | 
|  | 20 | +; BURN-MODE 17 | 
|  | 21 | +; HARDLIGHT-MODE 18 | 
|  | 22 | +; SOFTLIGHT-MODE 19 | 
|  | 23 | +; GRAIN-EXTRACT-MODE 20 | 
|  | 24 | +; GRAIN-MERGE-MODE 21 | 
|  | 25 | +; COLOR-ERASE-MODE 22 | 
|  | 26 | + | 
|  | 27 | +(define (ris-undefect image  | 
|  | 28 | +                    drawable | 
|  | 29 | +                    factor | 
|  | 30 | +                    method) | 
|  | 31 | +    (let* | 
|  | 32 | +        ( | 
|  | 33 | +            (drawable  (car (gimp-image-active-drawable image))) | 
|  | 34 | +            (oldwidth  (car (gimp-image-width image))) | 
|  | 35 | +            (oldheight (car (gimp-image-height image))) | 
|  | 36 | +            (newwidth  (* oldwidth factor)) | 
|  | 37 | +            (newheight (* oldheight factor)) | 
|  | 38 | +            (layer-base (car (gimp-layer-copy drawable TRUE))) | 
|  | 39 | +            (layer-defect (car (gimp-layer-copy drawable TRUE))) | 
|  | 40 | +            (layer-copy (car (gimp-layer-copy drawable TRUE))) | 
|  | 41 | +        ) | 
|  | 42 | +     | 
|  | 43 | +        (gimp-image-undo-group-start image) | 
|  | 44 | +     | 
|  | 45 | +        (gimp-context-set-interpolation method) | 
|  | 46 | + | 
|  | 47 | +        (set! layer-base (car (gimp-layer-new-from-visible image image "visible"))) | 
|  | 48 | +        (set! layer-defect (car (gimp-layer-copy layer-base TRUE))) | 
|  | 49 | +        (gimp-image-insert-layer image layer-base 0 -1) | 
|  | 50 | +        (gimp-image-insert-layer image layer-defect 0 -1) | 
|  | 51 | +        (gimp-layer-scale layer-defect newwidth newheight TRUE) | 
|  | 52 | +        (gimp-layer-scale layer-defect oldwidth oldheight TRUE) | 
|  | 53 | + | 
|  | 54 | +        (set! layer-copy (car (gimp-layer-copy layer-base TRUE))) | 
|  | 55 | +        (gimp-image-insert-layer image layer-copy 0 -1) | 
|  | 56 | +        (gimp-layer-set-mode layer-copy GRAIN-EXTRACT-MODE) | 
|  | 57 | +        (set! layer-defect (car (gimp-image-merge-down image layer-copy EXPAND-AS-NECESSARY))) | 
|  | 58 | +        (gimp-layer-set-mode layer-defect GRAIN-EXTRACT-MODE) | 
|  | 59 | +        (set! layer-base (car (gimp-image-merge-down image layer-defect EXPAND-AS-NECESSARY))) | 
|  | 60 | +        (gimp-item-set-name layer-base "RISundefect") | 
|  | 61 | + | 
|  | 62 | +        (gimp-displays-flush) | 
|  | 63 | +         | 
|  | 64 | +        (gimp-image-undo-group-end image) | 
|  | 65 | +    ) | 
|  | 66 | +) | 
|  | 67 | + | 
|  | 68 | +(script-fu-register "ris-undefect" | 
|  | 69 | +                    "_RIS undefect" | 
|  | 70 | +                    "Undefect based Resize used RIS (Reverse Interpolate Scale)" | 
|  | 71 | +                    "zvezdochiot https://github.com/zvezdochiot" | 
|  | 72 | +                    "This is free and unencumbered software released into the public domain." | 
|  | 73 | +                    "2025-05-18" | 
|  | 74 | +                    "*" | 
|  | 75 | +                    SF-IMAGE       "Image"       0 | 
|  | 76 | +                    SF-DRAWABLE    "Drawable"    0 | 
|  | 77 | +                    SF-VALUE       "Factor"      "0.5" | 
|  | 78 | +                    SF-ENUM        "Method"      '("InterpolationType" "cubic" "none" "linear" "cubic" "nohalo" "lohalo") | 
|  | 79 | +) | 
|  | 80 | + | 
|  | 81 | +(script-fu-menu-register "ris-undefect" "<Image>/Image/Transform") | 
0 commit comments