GIMP/Scripts/ScalePage
Jump to navigation
Jump to search
- Script names:
- dp-scale-all-fixed
- dp-scale-all-percent
- dp-scale-image-fixed
- dp-scale-image-percent
- Author: Katt83
- Summary: For all open images or just the current one:
- Scale the longest dimension:
- to size specified (in pixels)
- to specified percentage (50 means 50%, ...)
- Set new resolution (if smaller)
- Run unsharp-mask (with specified radius, amount, and threshold)
- MANUAL STEP: Lessen unsharp-mask using Edit/Fade Unsharp Mask. I usually decrease to 20 or 30%. (Do immediately after running script)
- ( Anyone knows how to script this, please let me know! )
- Scale the longest dimension:
(define (dp-scale-all-fixed max_size
new_res
radius sharp_amount threshold)
(let* (
(image-num (car (gimp-image-list)) )
(image-ids (cadr (gimp-image-list)) )
(counter 0)
)
(while (< counter image-num)
(let* (
; Reference into image-ids array
(image (aref image-ids counter))
(drawable (car (gimp-image-get-active-drawable image)))
)
(dp-scale-image-fixed image drawable
max_size
new_res
radius sharp_amount threshold)
(set! counter (+ counter 1))
(print (string-append "All=" (number->string counter) " out of " (number->string image-num)))
)
)
)
)
(define (dp-scale-all-percent percent
new_res
radius sharp_amount threshold)
(let* (
(image-num (car (gimp-image-list)) )
(image-ids (cadr (gimp-image-list)) )
(counter 0)
)
(while (< counter image-num)
(let* (
; Reference into image-ids array
(image (aref image-ids counter))
(drawable (car (gimp-image-get-active-drawable image)))
)
(dp-scale-image-percent image drawable
percent
new_res
radius sharp_amount threshold)
(set! counter (+ counter 1))
(print (string-append "All=" (number->string counter) " out of " (number->string image-num)))
)
)
)
)
; Scale image to a fixed size
(define (dp-scale-image-fixed image
drawable
max_size
new_res
radius sharp_amount threshold)
(let* ( (old_width (car (gimp-image-width image)))
(old_height (car (gimp-image-height image)))
(new_size (dp-calc-new-size old_width old_height max_size))
(new_width (car new_size))
(new_height (cadr new_size))
)
(dp-scale-image image drawable new_width new_height
new_res radius sharp_amount threshold)
)
)
; Scale image to a percentage of the current size
(define (dp-scale-image-percent image
drawable
percent
new_res
radius sharp_amount threshold)
(let* ( (old_width (car (gimp-image-width image)))
(old_height (car (gimp-image-height image)))
(new_size (dp-calc-new-size-percent old_width old_height percent))
(new_width (car new_size))
(new_height (cadr new_size))
)
(dp-scale-image image drawable new_width new_height
new_res radius sharp_amount threshold)
)
)
;;;; Does all the work!
(define (dp-scale-image image drawable
new_width new_height
new_res
radius sharp_amount threshold)
(let* ( (old_res (car (gimp-image-get-resolution image)))
(old_width (car (gimp-image-width image)))
(old_height (car (gimp-image-height image)))
(new_size (list old_width old_height))
(active_layer (gimp-image-get-active-layer image))
(new_layer 0)
)
(gimp-selection-none image)
(if (> (+ new_width new_height) 0)
(gimp-image-scale-full image new_width new_height INTERPOLATION-CUBIC)
)
(if (< new_res old_res)
(gimp-image-set-resolution image new_res new_res)
)
(plug-in-unsharp-mask RUN-NONINTERACTIVE image drawable
radius
sharp_amount
threshold)
)
; (gimp-message "Don't forget to Fade Unsharp Mask!!")
(gimp-displays-flush)
)
; Returns new dimensions as list based on ratio of old sizes
(define (dp-calc-new-size-percent old_x old_y percent)
(if (> old_x old_y)
(dp-calc-ratio old_x old_y (round (* old_x (/ percent 100))) 0)
(dp-calc-ratio old_x old_y 0 (round (* old_y (/ percent 100))))
)
)
; Returns new dimensions as list based on ratio of old sizes
(define (dp-calc-new-size old_x old_y new_dim)
(if (> old_x old_y)
(dp-calc-ratio old_x old_y new_dim 0)
(dp-calc-ratio old_x old_y 0 new_dim)
)
)
; Returns missing new size based on ratio of old sizes
(define (dp-calc-ratio old_x old_y new_x new_y)
(if (= new_x 0)
; newx/newy = oldx/oldy
; therefore, newx = (oldx/oldy) * newy
; result is (new_x, new_y)
(list (round (* new_y (/ old_x old_y))) new_y)
; else
(reverse (dp-calc-ratio old_y old_x new_y new_x))
)
)
(script-fu-register
"dp-scale-all-fixed"
"Scale All Images (_Fixed)..."
"Scales and unsharp-masks all open images. Edit/Fade Unsharp Mask on each image immediately afterwards!"
"Katt"
"Katt83"
"08/01/2010"
"" ;accepts any image type
SF-VALUE "Max Size:" "500"
SF-VALUE "Max Resolution:" "144"
SF-VALUE "Radius:" "1.5"
SF-VALUE "Sharp Amt:" "0.75"
SF-VALUE "Threshold:" "8"
)
(script-fu-menu-register "dp-scale-all-fixed"
"<Image>/DP")
(script-fu-register
"dp-scale-all-percent"
"Scale All Images _(Percent)..."
"Scales and unsharp-masks all open images. Edit/Fade Unsharp Mask on each image immediately afterwards!"
"Katt"
"Katt83"
"08/01/2010"
"" ;accepts any image type
SF-ADJUSTMENT "Percentage Scaling:" '(30 0 100 1 10 0 0)
SF-VALUE "Max Resolution:" "144"
SF-VALUE "Radius:" "1.5"
SF-VALUE "Sharp Amt:" "0.75"
SF-VALUE "Threshold:" "8"
)
(script-fu-menu-register "dp-scale-all-percent"
"<Image>/DP")
(script-fu-register
"dp-scale-image"
"_Scale Image..."
"Scales and unsharp-masks the image. Edit/Fade Unsharp Mask immediately afterwards!"
"Katt"
"Katt83"
"03/10/2009"
"" ;accepts any image type
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-VALUE "Width:" "0"
SF-VALUE "Height:" "300"
SF-VALUE "Max Resolution:" "144"
SF-VALUE "Radius:" "1.5"
SF-VALUE "Sharp Amt:" "0.75"
SF-VALUE "Threshold:" "8"
)
(script-fu-register
"dp-scale-image-fixed"
"_Scale Image (Fixed)"
"Scales and unsharp-masks the image. Edit/Fade Unsharp Mask immediately afterwards!"
"Katt"
"Katt83"
"03/10/2009"
"" ;accepts any image type
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-VALUE "Max Size:" "500"
SF-VALUE "Max Resolution:" "144"
SF-VALUE "Radius:" "1.5"
SF-VALUE "Sharp Amt:" "0.75"
SF-VALUE "Threshold:" "8"
)
(script-fu-menu-register "dp-scale-image-fixed"
"<Image>/DP")
(script-fu-register
"dp-scale-image-percent"
"_Scale Image (Percent)..."
"Scales and unsharp-masks the image. Edit/Fade Unsharp Mask immediately afterwards!"
"Katt"
"Katt83"
"03/10/2009"
"" ;accepts any image type
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Percentage:" '(30 0 100 1 10 0 0)
SF-VALUE "Max Resolution:" "144"
SF-VALUE "Radius:" "1.5"
SF-VALUE "Sharp Amt:" "0.75"
SF-VALUE "Threshold:" "8"
)
(script-fu-menu-register "dp-scale-image-percent"
"<Image>/DP")