Blog Entry

Web 2.0 Buttons mit Imagemagick Posted on April 8, 2008

Ok. viele hassen bereits diese Buzzwords wie Web 2.0 und eigentlich wollte ich es immer vermeiden :)

Wie auch immer, hier ein Script das Buttons generiert wie man Sie auf vielen sogenannten Web 2.0 Seiten findet.

Sample Button 1 Sample Button 2 Sample Button 3

Sample Button 1 Sample Button 2 Sample Button 3

Sample Button 1 Sample Button 2 Sample Button 3

Einfach das Archive entpacken und in das neue Verzeichnis wechseln, Script ausführen.

cd web2.0
web2butt.sh

Anschließend findet man die generierten Buttons im Verzeichnis out.

So funktioniert es ...

In der Datei buttons.txt ist die Beschriftung der generieren Buttons zu finden. Jede Zeile entspricht einem Button! Es ist somit ganz einfach mehre Text Dateien für Buttons mit unterschiedlichen Sprachen anzulegen.

Buttons Styles

Damit man einfach und schnell experimentieren kann habe ich die wichtigsten Variablen für das verändern der Buttons in einer externen Datei gespeichert. Diese sind im Verzeichnis styles zu finden.

#!/bin/bash

# Autor:    Werner Hartnagel
# Date:     2008/04/01
# Button Style Green-yellow
# License:  Attribution-Share Alike 2.0
#           http://creativecommons.org/licenses/by-sa/2.0/

WIDTH=0
HEIGHT=30
COLOR1=green
COLOR2=yellow
TEXT_COLOR=black
TEXT_SHADOW=#eeeeee
TEXT_SIZE=14
TEXT_FONT='DejaVu-Sans-Bold-Oblique'
BORDER_SIZE=1
BORDER_ROUND=12
BORDER_COLOR=$COLOR2
GRADIENT=${COLOR1}-${COLOR2}

Am besten einfach eine der Dateien öffnen und unter einen neuen Namen speichern, z.B. styles/mybuttons.sh Nun das Script web2butt.sh mit einem Text Editor öffnen, die Zeile mit # === Load Button Style === suchen und den vorhanden Pfad ändern zu styles/mybuttons.sh.

Hier gibt es das Imagemagick Web 2.0 Button Script zum Download.

#!/bin/bash

# Autor:    Werner Hartnagel
# Date:     2008/04/01
# License:  Attribution-Share Alike 2.0
#           http://creativecommons.org/licenses/by-sa/2.0/

# === Default Settings ===
DEBUG=0
TEMP_DIR=tmp
OUT_DIR=out

# === Load Button Style ===
#. style/greenyellow.sh
. style/lightorange.sh
#. style/orangered.sh

# === Lets do the Magick :) ===
BORDER_MARGIN=0$(echo "scale=1; $BORDER_SIZE/2" | bc)
i=1

while read LINE; do

    BUTT="$OUT_DIR/butt${i}.png"

    # Temp Image to get width of text
    convert -strokewidth 6 -background none -fill $TEXT_COLOR -font $TEXT_FONT -pointsize $TEXT_SIZE \
            label:"$LINE" \
            $TEMP_DIR/font-test.png

    if [ "$WIDTH" -eq "0" ]; then
        BUTTON_WIDTH=`convert $TEMP_DIR/font-test.png -format '%w'   info:`
        BUTTON_WIDTH=$(expr $BUTTON_WIDTH + 20)
    else
        BUTTON_WIDTH=$WIDTH
    fi

    if [ "$HEIGHT" -eq "0" ]; then
        BUTTON_HEIGHT=`convert $TEMP_DIR/font-test.png -format '%h'   info:`
        BUTTON_HEIGHT=$(expr $BUTTON_HEIGHT + 8)
    else
        BUTTON_HEIGHT=$HEIGHT
    fi

    echo "$BUTTON_WIDTH x $BUTTON_HEIGHT"

    # Create Gradient
    convert -size $(expr $BUTTON_WIDTH - 2)x$(expr $BUTTON_HEIGHT - 2) gradient:$GRADIENT      $TEMP_DIR/gradient_$GRADIENT.miff

    # Create the round corners and store as Magick Vector Graphics
    convert $TEMP_DIR/gradient_$GRADIENT.miff -border 1 \
            -format "roundrectangle $BORDER_MARGIN,$BORDER_MARGIN %[fx:w-$BORDER_MARGIN-1], %[fx:h-$BORDER_MARGIN-1] $BORDER_ROUND, $BORDER_ROUND" \
            info: > $TEMP_DIR/rounded_border.mvg

    # Button Border
    convert $TEMP_DIR/gradient_$GRADIENT.miff -border 1 -matte -channel RGBA -threshold -1 \
            -background none -fill none -stroke $BORDER_COLOR -strokewidth $BORDER_SIZE \
            -draw "@$TEMP_DIR/rounded_border.mvg"    $TEMP_DIR/button_overlay.miff

    # Add Text to Overlay
    convert $TEMP_DIR/button_overlay.miff -font $TEXT_FONT -pointsize $TEXT_SIZE \
            -fill $TEXT_SHADOW -draw "gravity Center text 1,1 '$LINE'" \
            -fill $TEXT_COLOR -draw "gravity Center text 0,0 '$LINE'" \
            $TEMP_DIR/button_overlay2.miff

    # Mask for the Button
    convert $TEMP_DIR/gradient_$GRADIENT.miff -border 1 -matte -channel RGBA -threshold -1 \
            -background none -fill white -stroke none -strokewidth 0 \
            -draw "@$TEMP_DIR/rounded_border.mvg"    $TEMP_DIR/button_mask.miff

    # Join the images
    convert $TEMP_DIR/gradient_$GRADIENT.miff -matte -bordercolor none -border 1 \
            $TEMP_DIR/button_mask.miff -compose DstIn -composite \
            $TEMP_DIR/button_overlay2.miff -compose Over -composite \
            -quality 95 PNG32:$BUTT

    (( i ++ ))

done < buttons.txt

if [ "$DEBUG" -ne "1" ]; then
    rm $TEMP_DIR/rounded_border.mvg
    rm $TEMP_DIR/gradient_$GRADIENT.miff
    rm $TEMP_DIR/button_overlay.miff
    rm $TEMP_DIR/button_overlay2.miff
    rm $TEMP_DIR/button_mask.miff
    rm $TEMP_DIR/font-test.png
fi

exit 0
Bookmark and Share


Tags: Image Magick, Bash | View Comments
Resize text: A A A