;############################################################################## ;# ;# Mericet Script-Fu Library - CropScreenshot ;# ;# ;# ;# Author : Andreas Habel ;# Date : 2009/01/29 ;# Filename : mericet-cropscreenshot.scm ;# Version : 1.0.0 ;# ;# Support : http://mericet.de ;# Copyright : 2009, Andreas Habel (http://mericet.de) ;# ;#----------------------------------------------------------------------------- ;# ;# 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 . ;# ;############################################################################## ; Create an array from a list. (define (list-to-array contents) (let* ((alen (length contents)) (n_array (cons-array alen 'double)) (count 0)) (for-each (lambda (val) (aset n_array count val) (set! count (+ count 1))) contents) n_array)) ;------------------------------------------------------------------------------ (define (mericet-cropscreenshot image layer border ctop cright cbottom cleft shadow) (gimp-image-undo-group-start image) (let* ( (width 0) (height 0) (x1 0) (y1 0) (x2 0) (y2 0) (steps 0) (dx1 0) (dy1 0) (vect '()) (color_black '(0 0 0 )) ) (set! width (car (gimp-drawable-width layer))) (set! height (car (gimp-drawable-height layer))) (srand (car(gettimeofday))) ; top (if (= ctop TRUE) (begin (set! vect '()) (set! x1 (car (gimp-drawable-offsets layer))) (set! y1 (cadr (gimp-drawable-offsets layer))) (set! x2 (+ x1 width)) (set! y2 y1) (set! vect (append vect (list x1 y1))) (gimp-rect-select image (car (gimp-drawable-offsets layer)) (cadr (gimp-drawable-offsets layer)) (car (gimp-drawable-width layer)) (car (gimp-drawable-height layer)) CHANNEL-OP-REPLACE FALSE 0 ) (while (< x1 x2) (set! dx1 (random border)) (set! dy1 (random border)) (set! x1 (+ x1 dx1)) (set! vect (append vect (list x1 (+ y1 dy1)))) ) (set! vect (append vect (list x2 y2))) (gimp-free-select image (length vect) (list-to-array vect) CHANNEL-OP-INTERSECT FALSE FALSE 0) (gimp-edit-cut layer) ) () ) ; bottom (if (= cbottom TRUE) (begin (set! vect '()) (set! x1 (car (gimp-drawable-offsets layer))) (set! y1 (+ height (cadr (gimp-drawable-offsets layer)))) (set! x2 (+ x1 width)) (set! y2 y1) (set! vect (append vect (list x1 y1))) (gimp-rect-select image (car (gimp-drawable-offsets layer)) (cadr (gimp-drawable-offsets layer)) (car (gimp-drawable-width layer)) (car (gimp-drawable-height layer)) CHANNEL-OP-REPLACE FALSE 0 ) (while (< x1 x2) (set! dx1 (random border)) (set! dy1 (random border)) (set! x1 (+ x1 dx1)) (set! vect (append vect (list x1 (- y1 dy1)))) ) (set! vect (append vect (list x2 y2))) (gimp-free-select image (length vect) (list-to-array vect) CHANNEL-OP-INTERSECT FALSE FALSE 0) (gimp-edit-cut layer) ) () ) ; left (if (= cleft TRUE) (begin (set! vect '()) (set! x1 (car (gimp-drawable-offsets layer))) (set! y1 (cadr (gimp-drawable-offsets layer))) (set! x2 x1) (set! y2 (+ y2 height)) (set! vect (append vect (list x1 y1))) (gimp-rect-select image (car (gimp-drawable-offsets layer)) (cadr (gimp-drawable-offsets layer)) (car (gimp-drawable-width layer)) (car (gimp-drawable-height layer)) CHANNEL-OP-REPLACE FALSE 0 ) (while (< y1 y2) (set! dx1 (random border)) (set! dy1 (random border)) (set! y1 (+ y1 dy1)) (set! vect (append vect (list (+ x1 dx1) y1))) ) (set! vect (append vect (list x2 y2))) (gimp-free-select image (length vect) (list-to-array vect) CHANNEL-OP-INTERSECT FALSE FALSE 0) (gimp-edit-cut layer) ) () ) ; right (if (= cright TRUE) (begin (set! vect '()) (set! x1 (+ width (car (gimp-drawable-offsets layer)))) (set! y1 (cadr (gimp-drawable-offsets layer))) (set! x2 (+ width (car (gimp-drawable-offsets layer)))) (set! y2 (+ height (cadr (gimp-drawable-offsets layer)))) (set! vect (append vect (list x1 y1))) (gimp-rect-select image (car (gimp-drawable-offsets layer)) (cadr (gimp-drawable-offsets layer)) (car (gimp-drawable-width layer)) (car (gimp-drawable-height layer)) CHANNEL-OP-REPLACE FALSE 0 ) (while (< y1 y2) (set! dx1 (random border)) (set! dy1 (random border)) (set! y1 (+ y1 dy1)) (set! vect (append vect (list (- x1 dx1) y1))) ) (set! vect (append vect (list x2 y2))) (gimp-free-select image (length vect) (list-to-array vect) CHANNEL-OP-INTERSECT FALSE FALSE 0) (gimp-edit-cut layer) ) () ) (gimp-selection-none image) (if (= shadow TRUE) (script-fu-drop-shadow image layer 4 4 8 color_black 70 TRUE) () ) (gimp-image-undo-group-end image) (gimp-displays-flush) ) ) (script-fu-register "mericet-cropscreenshot" _"Crop Screenshot" "" "Andreas Habel " "Andreas Habel, " "Jan 29, 2009" "" SF-IMAGE "The image" 0 SF-DRAWABLE "The layer" 0 SF-VALUE "Borderwidth:" "15" SF-TOGGLE "Crop top:" FALSE SF-TOGGLE "Crop right:" TRUE SF-TOGGLE "Crop bottom:" TRUE SF-TOGGLE "Crop left:" FALSE SF-TOGGLE "Add shadow:" TRUE ) (script-fu-menu-register "mericet-cropscreenshot" "/Filters/Mericet")