|
| 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