; Night Sky (image/alpha/logo) ; Version 2.2 (for Gimp 2.2) - 16 Sep. 2007 ; ; ; The GIMP -- an image manipulation program ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; Render night skies with figurative stars ; Copyright (C) 2003-2007 Eric Lamarque ; ; 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. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. (define (real-night img star-color sky-color do-merge) (define (randots img layer number tileable) (let* ((remaining-points number) (width (if (= tileable FALSE) (car (gimp-image-width img)) (- (car (gimp-image-width img)) (cadr (gimp-brushes-get-brush))))) (height (if (= tileable FALSE) (car (gimp-image-height img)) (- (car (gimp-image-height img)) (caddr (gimp-brushes-get-brush))))) ) (while (> remaining-points 0) (let* ((point (cons-array 2 'double))) (if (= tileable FALSE) (begin (aset point 0 (rand width)) (aset point 1 (rand height))) (begin (aset point 0 (+ (rand width) (/ (cadr (gimp-brushes-get-brush)) 2))) (aset point 1 (+ (rand height) (/ (caddr (gimp-brushes-get-brush)) 2))))) (gimp-paintbrush-default layer 2 point) (set! remaining-points (- remaining-points 1)) ) ) ) ) (let* ((width (car (gimp-image-width img))) (height (car (gimp-image-height img))) (black-layer (car (gimp-layer-new img width height RGBA-IMAGE "Black" 100 NORMAL))) (star-layer (car (gimp-layer-new img width height RGBA-IMAGE "Stars" 100 NORMAL))) (glowleft-layer 0) (glowright-layer 0) (glowup-layer 0) (glowdown-layer 0) (n-little-stars (/ width 4)) ; little tip to adapt number of stars (n-mean-stars (/ n-little-stars 2)) (n-big-stars (/ n-mean-stars 4)) (sky-layer (car (gimp-layer-new img width height RGBA-IMAGE "Sky" 100 NORMAL))) (skymask-layer (car (gimp-layer-create-mask sky-layer WHITE-MASK))) (old-fg (car (gimp-palette-get-foreground))) (old-bg (car (gimp-palette-get-background))) (old-brush (car (gimp-brushes-get-brush)))) ; add new layers to image (gimp-image-add-layer img black-layer -1) (gimp-image-add-layer img star-layer -1) (gimp-image-add-layer img sky-layer -1) ; clear all layer (gimp-selection-invert img) (gimp-edit-clear black-layer) (gimp-edit-clear star-layer) (gimp-edit-clear sky-layer) (gimp-selection-invert img) (gimp-edit-clear black-layer) (gimp-edit-clear star-layer) (gimp-edit-clear sky-layer) ; black background (gimp-palette-set-foreground '(0 0 0)) (gimp-edit-fill black-layer FG-IMAGE-FILL) ; stars (gimp-palette-set-foreground star-color) (gimp-brushes-set-brush "Circle (01)") (randots img star-layer n-little-stars FALSE) (gimp-brushes-set-brush "Circle (03)") (randots img star-layer n-mean-stars FALSE) (gimp-brushes-set-brush "Circle (05)") (randots img star-layer n-big-stars FALSE) ; glowing (set! glowleft-layer (car (gimp-layer-copy star-layer FALSE))) (gimp-image-add-layer img glowleft-layer -1) (plug-in-mblur 1 img glowleft-layer 0 10 0 0 0) (set! glowright-layer (car (gimp-layer-copy star-layer FALSE))) (gimp-image-add-layer img glowright-layer -1) (plug-in-mblur 1 img glowright-layer 0 10 180 0 0) (set! glowup-layer (car (gimp-layer-copy star-layer FALSE))) (gimp-image-add-layer img glowup-layer -1) (plug-in-mblur 1 img glowup-layer 0 10 90 0 0) (set! glowdown-layer (car (gimp-layer-copy star-layer FALSE))) (gimp-image-add-layer img glowdown-layer -1) (plug-in-mblur 1 img glowdown-layer 0 10 270 0 0) (gimp-image-raise-layer-to-top img star-layer) ; blue atmosphere (gimp-palette-set-foreground sky-color) (gimp-edit-fill sky-layer FG-IMAGE-FILL) ; atmosphere dim with height (gimp-palette-set-default-colors) ; generate segfault (gimp-image-add-layer-mask img sky-layer skymask-layer) (gimp-edit-blend skymask-layer FG-BG-RGB NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE FALSE 3 0.20 TRUE 1 1 1 height) (gimp-image-raise-layer-to-top img sky-layer) (if (= do-merge TRUE) (let* ((merged-layer 0)) (set! merged-layer (car (gimp-image-merge-down img sky-layer CLIP-TO-IMAGE))) (set! merged-layer (car (gimp-image-merge-down img merged-layer CLIP-TO-IMAGE))) (set! merged-layer (car (gimp-image-merge-down img merged-layer CLIP-TO-IMAGE))) (set! merged-layer (car (gimp-image-merge-down img merged-layer CLIP-TO-IMAGE))) (set! merged-layer (car (gimp-image-merge-down img merged-layer CLIP-TO-IMAGE))) (set! merged-layer (car (gimp-image-merge-down img merged-layer CLIP-TO-IMAGE))) (gimp-drawable-set-name merged-layer "Night sky") ) ) (gimp-brushes-set-brush old-brush) (gimp-palette-set-foreground old-fg) (gimp-palette-set-background old-bg) (gimp-displays-flush) ) ) (define (script-fu-nuit width height star-color sky-color do-merge) (let* ((img (car (gimp-image-new width height RGB)))) (gimp-image-undo-disable img) (gimp-selection-all img) (real-night img star-color sky-color do-merge) (gimp-selection-none img) (gimp-image-clean-all img) (gimp-image-undo-enable img) (gimp-display-new img) )) (define (script-fu-context-night img layer star-color sky-color do-merge) (gimp-undo-push-group-start img) (real-night img star-color sky-color do-merge) (gimp-undo-push-group-end img) ) (script-fu-register "script-fu-context-night" _"/Script-Fu/Misc/Night sky" "Night Sky" "Eric Lamarque " "Eric Lamarque" "October 2003" "RGB*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-COLOR _"Star color" '(255 255 255) SF-COLOR _"Sky color" '(31 17 221) SF-TOGGLE _"Merge layer?" TRUE ) (script-fu-register "script-fu-nuit" "/Xtns/Script-Fu/Misc/Night sky" "Night Sky" "Eric Lamarque " "Eric Lamarque" "October 2003" "" SF-ADJUSTMENT _"Width" '(256 1 2048 1 10 0 1) SF-ADJUSTMENT _"Height" '(256 1 2048 1 10 0 1) SF-COLOR _"Star color" '(255 255 255) SF-COLOR _"Sky color" '(31 17 221) SF-TOGGLE _"Merge layer?" TRUE ) (define (script-fu-nightsky-logo text size font star-color sky-color transparent) (let* ((img (car (gimp-image-new 256 256 RGB))) (text-layer (car (gimp-text-fontname img -1 0 0 text 0 TRUE size PIXELS font))) (width (+ 20 (car (gimp-drawable-width text-layer)))) (height (+ 20 (car (gimp-drawable-height text-layer)))) (bg-layer (car (gimp-layer-new img width height RGBA-IMAGE "Background" 100 NORMAL))) (old-fg (car (gimp-palette-get-foreground))) ) (gimp-image-undo-disable img) (gimp-image-resize img width height 0 0) ; add layer to image (gimp-image-add-layer img bg-layer -1) ; fill background with active background color or clear it (gimp-selection-all img) (if (= transparent FALSE) (gimp-edit-fill bg-layer BG-IMAGE-FILL) (gimp-edit-clear bg-layer) ) (gimp-layer-translate text-layer 10 10) (gimp-selection-layer-alpha text-layer) (gimp-palette-set-foreground '(0 0 0)) (gimp-edit-fill bg-layer FG-IMAGE-FILL) (gimp-palette-set-foreground old-fg) (gimp-selection-none img) (plug-in-gauss-rle2 1 img bg-layer 10 10) (gimp-selection-layer-alpha text-layer) (real-night img star-color sky-color TRUE) (gimp-selection-none img) (gimp-layer-set-name (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE)) "Night sky text") (gimp-image-undo-enable img) (gimp-image-clean-all img) (gimp-displays-flush) (gimp-display-new img) ) ) (script-fu-register "script-fu-nightsky-logo" "/Xtns/Script-Fu/Logos/Night sky" "Render a night sky in a logo" "Eric Lamarque " "Eric Lamarque" "October 2003" "" SF-STRING _"Text" "NIGHT SKY" SF-ADJUSTMENT _"Font Size (pixels)" '(100 2 1000 1 10 0 1) SF-FONT _"Font" "-*-Arial-bold-r-*-*-*-*-*-*-*-*-iso8859-1" SF-COLOR _"Star color" '(255 255 255) SF-COLOR _"Sky color" '(38 63 127) SF-TOGGLE "Transparent?" FALSE )