Skip to main content
Commonmark migration
Source Link

#Bash with Bc and ImageMagick

Bash with Bc and ImageMagick

#Bash with Bc and ImageMagick

Bash with Bc and ImageMagick

Source Link
manatwork
  • 20.9k
  • 5
  • 53
  • 82

#Bash with Bc and ImageMagick

#!/bin/bash size="${1:-10}" width=$(( size*25 )) height=$(( size*size+size*10 )) cos=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) c(i)*100" ) ) sin=( $( bc -l <<< "for (i=0;i<3.14*2;i+=.05) s(i)*100" ) ) cos=( "${cos[@]%.*}" ) sin=( "${sin[@]%.*}" ) cos=( "${cos[@]/%-/0}" ) sin=( "${sin[@]/%-/0}" ) snow=() needle=() decor=() for ((i=2;i<size+2;i++)); do for ((j=3;j<=31;j++)); do (( x=width/2+i*10+cos[62-j]*i*10/100 )) (( y=i*i+sin[j]*i*5/100 )) for ((e=0;e<i;e++)); do needle+=( -draw "line $x,$y $(( x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))" -draw "line $(( width-x )),$y $(( width-x+RANDOM%i-i/2 )),$(( y+RANDOM%i-i/2 ))" ) done (( RANDOM%2 )) && (( x=width-x )) snow+=( -draw "circle $x,$(( y-i/2 )) $(( x+i/3 )),$(( y-i/2+i/3 ))" ) (( RANDOM%10 )) || decor+=( -fill "rgb($(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )),$(( RANDOM%5*20+50 )))" -draw "circle $x,$(( y+i )) $(( x+i/2 )),$(( y+i+i/2 ))" ) done done flake=() for ((i=0;i<width*height/100;i++)); do flake+=( -draw "point $(( RANDOM%width )),$(( RANDOM%height ))" ) done convert \ -size "${width}x$height" \ xc:skyblue \ -stroke white \ -fill white \ "${snow[@]}" \ -blur 5x5 \ "${flake[@]}" \ -stroke brown \ -fill brown \ -draw "polygon $(( width/2 )),0 $(( width/2-size )),$height, $(( width/2+size )),$height" \ -stroke green \ -fill none \ "${needle[@]}" \ -stroke none \ -fill red \ "${decor[@]}" \ x: 

Sample run:

bash-4.1$ ./xmas.sh 5 

Sample output:

christmas tree of size 5

Sample run:

bash-4.1$ ./xmas.sh 15 

Sample output:

christmas tree of size 15