#!/bin/bash # This makes Wallpapers. # You need xv and gimp and ImageMagick. Also put hex2rgb in your $PATH and place the # two fuzyy.pl files somewhere. # Read the README file first. Uh oh! Too late. # set -x # PARAMETERS : The Parameters {{{ PARAMETERS () { # wallpaper_maker directories DIR=. # Directory where ALL jpgs will be changed END_DIR=~/Pictures/to_post/t # Destination to where they will be moved WATER=~/tmp/pics/stamp.png # Watermark that will be placed left bottom TMP_DIR=`mktemp -d` # Tempray directory. Must be possible to execut programs in! echo $TMP_DIR > /dev/null WIDTH=1920 # Width of the wallpaper HEIGHT=1200 # Height of the wallpaper PREVIEW="x240+64+0" # Size and location of the preview SIZE=$WIDTH"x"$HEIGHT # Fonts # First do an ubdatedb. Then do `imagick_type_gen > ~/.magick/type.xml` # To search fonts, do the following: # grep -B 3 /home/extra/fonts type.xml|grep name|grep -v fullname|awk -F\" '{print $2}' . ~/bin/fontlist.txt # Layouts LAYOUTS="Indent Shadow Raise Border" #LAYOUTS="Shadow" # Test files test -d $END_DIR || mkdir -p $END_DIR test -d $DIR || (echo "$DIR does not exit.";exit) COUNT=`find $DIR -type f|wc -l` } # }}} # LAYOUT : Text Layout {{{ Indent() { convert -size "$WIDTH"x250 xc:transparent -font $FONT -pointsize 72 \ -fill black -annotate +24+154 "$NAME" \ -fill white -annotate +26+156 "$NAME" \ -fill $COLOUR -annotate +25+155 "$NAME" \ $TMP_DIR/name.png } Shadow () { convert -background none -stroke \#5e5e5e -fill $COLOUR \ -font $FONT -pointsize 72 label:"$NAME" -trim \ \( +clone -background black -shadow 80x3+3+3 \) +swap \ -background none -layers merge +repage \ $TMP_DIR/name.png } Raise () { convert -size "$WIDTH"x250 xc:transparent -font $FONT -pointsize 72 \ -fill white -annotate +24+154 "$NAME" \ -fill black -annotate +26+156 "$NAME" \ -fill $COLOUR -annotate +25+155 "$NAME" \ $TMP_DIR/name.png } Border () { convert -size "$WIDTH"x250 xc:transparent -font $FONT -pointsize 72 \ -draw "fill black text 27,157 '$NAME' \ text 25,158 '$NAME' \ text 23,157 '$NAME' \ text 22,155 '$NAME' \ text 23,153 '$NAME' \ text 25,152 '$NAME' \ text 27,153 '$NAME' \ text 28,155 '$NAME' \ fill $COLOUR text 25,155 '$NAME' " \ $TMP_DIR/name.png } # /* }}} */ # SPLIT_NAME : Split the name {{{ SPLIT_NAME () { COIN=$RANDOM let "COIN %= 2" # COIN=1 if [ "$COIN" = "1" ] then NAME2=`echo $NAME|awk '{print $NF}'` NAME1=`echo $NAME|awk -F"$NAME2" '{print $1}'` # Last part NAME=$NAME2 $LAYOUT mogrify -trim -bordercolor transparent -border 2 $TMP_DIR/name.png mv $TMP_DIR/name.png $TMP_DIR/name2.png # First part NAME=$NAME1 $LAYOUT mogrify -trim -bordercolor transparent -border 2 $TMP_DIR/name.png mv $TMP_DIR/name.png $TMP_DIR/name1.png montage -label '' $TMP_DIR/name1.png -label '' $TMP_DIR/name2.png -tile 1x2 -mode concatenate \ -background transparent $TMP_DIR/name.png else $LAYOUT fi } # /* }}} */ # RESIZE_TEXT : Resize the text and place it {{{ RESIZE_TEXT () { mogrify -trim $TMP_DIR/name.png convert -background transparent -splice 50x50 $TMP_DIR/name.png $TMP_DIR/name.png convert -gravity southeast -background transparent -splice 0x50 $TMP_DIR/name.png $TMP_DIR/name.png NAME_SIZE=`identify $TMP_DIR/name.png|awk '{print $3}'|awk -Fx '{print $1}'` if [ "$NAME_SIZE" -gt "$PIC_SIZE" ] then mogrify -resize $PIC_SIZE $TMP_DIR/name.png fi # Place the text PLACINGS="NorthWest SouthWest North South NorthEast SouthEast" PLACING=($PLACINGS) NUM_PLACING=${#PLACING[*]} PLACING=${PLACING[$((RANDOM%NUM_PLACING))]} composite -gravity $PLACING $TMP_DIR/name.png $TMP_DIR/temp.jpg $TMP_DIR/temp.jpg } # /* }}} */ # THE_NAME : The Name {{{ THE_NAME () { if [ "$NAME" != "quasi_unknown" ] then NAME_CALLING echo $LAYOUT $FONT fi } # /* }}} */ # NAME_CALLING : Making the name {{{ NAME_CALLING () { #Randonm font FONT=($FONTS) NUM_FONT=${#FONT[*]} FONT=${FONT[$((RANDOM%NUM_FONT))]} echo $FONT >> ~/tmp/fontcounter #Random layout LAYOUT=($LAYOUTS) NUM_LAYOUT=${#LAYOUT[*]} LAYOUT=${LAYOUT[$((RANDOM%NUM_LAYOUT))]} SPLIT_NAME RESIZE_TEXT } # /* }}} */ # BORDER_PICTURE : Place a border around the picture {{{ BORDER_PICTURE () { mogrify -resize 1770x1050 $FILE # Resize # Calculate the avarage coulour and turn it into rgb as well COLOUR=`convert $FILE -filter Box -resize 1x1 -depth 8 txt:-| \ head -n 2| tail -n 1|awk '{print $NF}'` #Colour COLOR=`echo $COLOUR|sed 's/,/ /g'|awk -Frgb '{print $NF}'` ############ gimp -i -c -d -b "(batch_fuzzy_border \"$FILE\" '$COLOR 30 FALSE 4.5 TRUE 75 )" -b "(gimp-quit 0)" ############ test -f /temp.jpg && rm temp.jpg convert -mattecolor ${COLOUR} -frame 25x25+0+25 $FILE $FILE # Border convert -bordercolor ${COLOUR} -border 50 $FILE $FILE # make full height } # /* }}} */ # EMPTY_SIDE : Make the side that contains the name {{{ EMPTY_SIDE () { PIC_SIZE=`jhead $FILE|grep ^Res|awk '{print $3}'` # Determine the size let PIC_SIZE="$WIDTH - $PIC_SIZE" convert -size "$PIC_SIZE"x"$HEIGHT" xc:${COLOUR} $TMP_DIR/temp.jpg # Make the wallpaper } # /* }}} */ # GIMP : Running the GIMP halfway {{{ GIMP () { #kill -15 `ps T|grep gimp|head -n 1|awk '{print $1}'` >> /dev/null 2>&1 gimp --no-data --no-fonts $FILE $TMP_DIR/name.png $TMP_DIR/temp.jpg >> /dev/null 2>&1 #& } # }}} # MAKE_WALLPAPER : Making of the wallpaper. Basic script. {{{ MAKE_WALLPAPER () { COUNT=`find $DIR -type f|wc -l` PARAMETERS let RESIZE="$HEIGHT - 150" for FILE in `find $DIR -type f|sort` do echo "$COUNT to go" let COUNT=COUNT-1 NAME=`jhead $FILE |grep ^Comment|awk -F": " '{print $NF}'` BORDER_PICTURE EMPTY_SIDE THE_NAME montage $TMP_DIR/temp.jpg $FILE -tile 2x1 -mode concatenate $FILE jhead -cl "$NAME" $FILE done # More cleaning rm $TMP_DIR temp.jpg -rf # Move the files to their final destination gqview $DIR } # }}} # EXTRA_INFO : Some Extra Info {{{ EXTRA_INFO () { TEXT="Still $COUNT to go. Now working on `echo $FILE| \ awk -F/ '{print $NF}'`" let COUNT=COUNT-1 # Give some feedback } # /* }}} */ MAKE_WALLPAPER