Hi, I already sent this in mid-July, but it seems to have gotten lost, and I forgot about it too. So here goes again:
I wrote the attached script to auto-generate menubar entries in Makefiles using the Gimp. It needs Gimp 1.2 and the xfonts-scalable-nonfree package for the luximono font. See the top of the script for usage instructions. The PNGs output by this script display OK on Netscape 4.7; if the /CD/ table background colour is set to 0xdd9988, there is no colour difference for me on a 24bpp display. Still, I wouldn't be surprised if NS 4 still displayed things incorrectly for lower colour depths. For other browsers (which support PNG transparency), even a slightly incorrect display shouldn't be noticeable. For me, it always leaves a transparent 8 pixel wide area at the right edge of the generated image. This isn't too much of a problem IMHO, so I'm not trying to work around what I believe is a bug in Gimp's string-extent measuring command. Josip, maybe you could take care of integrating this into the Makefiles and translation system? :-) Cheers, Richard -- __ _ |_) /| Richard Atterer | CS student at the Technische | GnuPG key: | \/¯| http://atterer.net | Universität München, Germany | 0x888354F7 ¯ '` ¯
; __ _ ; |_) /| Copyright (C) 2002 Richard Atterer ; | \/¯| <[EMAIL PROTECTED]> ; ¯ '` ¯ ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License, version 2. See ; the file COPYING for details. ; Copy this script to ~/.gimp-1.2/scripts/ before starting the Gimp. ; The script will become available via the menu entry ; "Xtns/Script-Fu/Debian/Debian-CD menubar". ; To create an image from the command line, use: ; gimp -i -c -d -s -b '(script-fu-debian-cd-bar "debian/rules" "-bigelow-luximono-medium-r-normal-*-*-640-*-*-p-*-iso10646-1" 130 32 "rules.png")' '(gimp-quit 0)' ; The "130" is the fontsize (13.0 pt). The luximono font is part of ; the xfonts-scalable-nonfree package (used to be called lucida mono ; in older releases). The output file is always in PNG format. The ; pink background colour is hardwired below as RGB 0xdd9988. ;====================================================================== (define (script-fu-debian-cd-bar text fontname fontsize final-height filename) ; user variables ;(set! fontsize 130) ; in pt*10 ;(set! fontname "-bigelow-luximono-medium-r-normal-*-*-640-*-*-p-*-iso10646-1") ;(set! fontname "-bigelow-luximono-medium-r-normal-*-*-640-*-*-p-*-iso8859-1") ;(set! fontname "-zz abiword-luxi mono (iso 8859 1)-medium-r-normal-*-*-640-*-*-p-*-iso8859-1") (set! background-colour '(221 153 136)) ; RGB 0xdd9988 ;(set! final-height 32) ; height of output image ;______________________________________________________________________ (set! border 10) ; To leave room for blurring/bumpmapping (set! blur-radius 5) ; For Gauß RLE blur ; Create canvas (set! image (car (gimp-image-new final-height final-height RGB))) ; How high/wide in pixels is the text going to be? (set! text-extents (gimp-text-get-extents-fontname text fontsize POINTS fontname)) (set! text-width (car text-extents)) (set! text-height (cadr text-extents)) (set! text-ascent (caddr text-extents)) (set! text-descent (caddr (cdr text-extents))) ;______________________________________________________________________ ; Create white-on-black text layer (set! image-width (+ text-width (* 2 border))) (set! image-height (+ text-height (* 2 border))) (if (< image-height final-height) (set! image-height final-height)) (set! text-bw (car (gimp-layer-new image text-width text-height RGB_IMAGE "text-bw" 100 NORMAL))) (gimp-image-add-layer image text-bw -1) ; at top of layer stack (gimp-layer-set-visible text-bw FALSE) (gimp-palette-set-background '(0 0 0)) (gimp-palette-set-foreground '(255 255 255)) (gimp-edit-fill text-bw 1) ; Fill with bg col ; Create text and anchor it to text-bw (print " painting text - in case of error, check whether font is available") (gimp-floating-sel-anchor (car (gimp-text-fontname image text-bw 0 0 text -1 TRUE fontsize POINTS fontname))) (print " done") ; resize, adding black border around the white-on-black text (gimp-layer-resize text-bw image-width image-height border (/ (- image-height text-height) 2) ) (gimp-layer-set-offsets text-bw 0 0) (gimp-image-resize image image-width image-height 0 0) ;______________________________________________________________________ ; Make copy of text-bw layer in text-blur, blur that for use as bumpmap (set! text-blur (car (gimp-layer-copy text-bw FALSE))) ; no alpha chan (gimp-layer-set-name text-blur "text-blur") (gimp-image-add-layer image text-blur -1) ; at top of layer stack (gimp-layer-set-visible text-blur FALSE) (plug-in-gauss-rle TRUE image text-blur blur-radius TRUE TRUE) ;______________________________________________________________________ ; Create background layer (gimp-palette-set-background background-colour) (set! background (car (gimp-layer-new image image-width image-height RGB_IMAGE "background" 100 NORMAL))) (gimp-image-add-layer image background 9) ; at bottom of layer stack (gimp-edit-fill background 1) ; Fill with bg col (gimp-layer-set-visible background TRUE) ; Now bumpmap it with text-blur (plug-in-bump-map TRUE image background text-blur 125 20 1 ; azimuth, elevation, depth 0 0 0 60 ; X/Y offset, waterlevel, ambient TRUE TRUE 0) ; compensate, invert map, linear map ;______________________________________________________________________ ; Create another completely black layer for the final text (set! text (car (gimp-layer-new image image-width image-height RGB_IMAGE "text" 100 NORMAL))) (gimp-image-add-layer image text -1) ; at top of layer stack (gimp-layer-set-visible text TRUE) (gimp-palette-set-background '(0 0 0)) (gimp-edit-fill text 1) ; Fill with bg col ; Add an alpha mask to that layer (gimp-layer-add-alpha text) (set! text-mask (car (gimp-layer-create-mask text 1))) (gimp-image-add-layer-mask image text text-mask) ; Copy text-bw to alpha mask (gimp-edit-copy text-bw) (gimp-floating-sel-anchor (car (gimp-edit-paste text-mask 0))) ;====================================================================== ; Image is finished! ; Remove temporary layers (gimp-image-remove-layer image text-bw) (gimp-image-remove-layer image text-blur) ; Merge remaining layers (gimp-image-merge-visible-layers image 1) ; CLIP_TO_IMAGE ; Convert to indexed (gimp-convert-indexed image 0 0 ; dither=none, MAKE_PALETTE 31 FALSE TRUE "") ; Select those parts that have the background colour, make them ; transparent. (set! background (aref (cadr (gimp-image-get-layers image)) 0)) (gimp-fuzzy-select background 0 0 0 ; x/y, threshold 2 FALSE 0 0 FALSE) ; REPLACE, antialias, feath/rad, merg (gimp-edit-clear background) (gimp-selection-none image) ; Remove some of the border (set! final-width (+ text-width (* 2 blur-radius))) (gimp-crop image (- final-width 2) (- final-height 2) (/ (- image-width final-width -2) 2) (/ (- image-height final-height -2) 2)) (gimp-palette-set-background background-colour) ;______________________________________________________________________ (if (= (string-length filename) 0) (gimp-display-new image) (file-png-save TRUE image background filename filename FALSE 9 TRUE ; interlace, compression, background col FALSE FALSE FALSE FALSE)) ; gamma, off, time, phys ) ;====================================================================== (script-fu-register "script-fu-debian-cd-bar" ; function name "<Toolbox>/Xtns/Script-Fu/Debian/Debian-CD menubar" ; menu position "PNG generator for http://www.debian.org/CD/" "Richard Atterer <[EMAIL PROTECTED]>" ; author "Copyright 2002 - released under the GPL" ; copyright message "Jul 13, 2002" ; date created "" ; Image type that the script works on SF-VALUE "Text" "\"net_install\"" ; a text variable SF-FONT "Font" "-bigelow-luximono-medium-r-normal-*-*-640-*-*-p-*-iso10646-1" SF-VALUE "Font size (pt*10)" "130" SF-VALUE "Final height (pixels)" "32" SF-VALUE "Filename or \"\" to display" "\"\"" )
pgpwN56qQbU0J.pgp
Description: PGP signature