Void · 2017-09-25 05:57
A friend of mine whrote a bash script to randomly generate images by merging two separate images, I asked him to make some lain pics and we did. Enjoy
Hououin Kyouma · 2017-09-25 05:58
Anamika · 2017-09-25 06:02
Linda Lee · 2017-09-25 06:10
Otto Normalverbraucher · 2017-09-27 16:46
these are neat. can you post the script?
notneo · 2017-09-27 17:10
>>1081
Here you go. The following would create 10 new images from seed numbers 0 to 10 from image1 and image2:
$ for i in {0..10}; do ./vulcan.sh image1.png image2.png $i; done
It depends on Imagemagick.
The main sh file below and a data file, vulcan.sh and patterns.txt.
$ cat vulcan.sh
#!/bin/bash
ARG1=$1
ARG2=$2
ARG3=$3
gen_clone=1
declare -a patterns
patterns=(`cat patterns.txt`)
get_random_value_for()
{
local __result=$1;
local lc=`convert -list $2 | wc -l`
# lc=`expr $r % $lc + 1`
let lc=$RANDOM%$lc+1
local value=$(convert -list $2 | sed -n "${lc}p")
eval $__result="'$value'"
}
gen_rotate()
{
local __result=$1;
local instr
let n=$RANDOM%2
case "$n" in
0)instr="-rotate 90 "
;;
1)instr="-blur 0x5 "
esac
eval $__result="'$instr'"
}
gen_transform()
{
local __result=$1;
local transform=""
let n=$RANDOM%4;
case "$n" in
0)
;;
1)gen_rotate result
transform+=$result
;;
2) transform+="-flip "
;;
3) transform+="-flop "
;;
*) echo "unexpected case"
;;
esac
eval $__result="'$transform'"
}
gen_generator()
{
local __result=$1;
local gen=""
let n=$RANDOM%4
if [ $n -eq 0 ] && [ $gen_clone -eq 0 ]
then
let n=1;
fi
local i
case "$n" in
0)gen="+clone "
;;
1)gen="gradient: "
;;
2)gen="xc: +noise Random "
;;
3)
let i=$RANDOM%${#patterns[*]}
gen="pattern:"${patterns[$i]}" "
;;
esac
eval $__result="'$gen'"
}
gen_layer()
{
local __result=$1;
local instr=" ( "
gen_generator result
instr+=$result
gen_transform result;
instr+=$result
instr+=" ) "
eval $__result="'$instr'"
}
gen_compose()
{
local __result=$1;
get_random_value_for result compose
local instr="-compose "$result" "
instr+="-composite "
eval $__result="'$instr'"
}
gen_image_cmd()
{
local __result=$1;
local cmd
gen_clone=0
gen_layer result
cmd+=" "$result
gen_clone=1
local n
let n=$RANDOM%5;
for i in `seq ${n}`
do
gen_layer result
cmd+=" "$result
gen_compose result
cmd+=$result
done
eval $__result="'$cmd'"
}
gen_image_mate_cmd()
{
local __result=$1;
local cmd
eval $__result="'$cmd'"
}
new_seed_from()
{
local __result=0
local a="${1%.*}"
local b="${2%.*}"
let "RANDOM=$a + $b + $3"
}
if [ -z $ARG3 ]
then
new_seed_from $ARG1 $ARG2 0
gen_image_cmd result
let newseed=$RANDOM
cmd="convert -seed "$newseed" -size 256x256 "$result" "$newseed.png
else
VFILENAMEA=$ARG1
VFILENAMEB=$ARG2
new_seed_from $ARG1 $ARG2 $ARG3
gen_transform result
XFORM=$result
gen_compose result
COMP=$result
let newseed=$RANDOM
cmd="convert -seed "$newseed" -size 256x256 "$VFILENAMEA" "$VFILENAMEB" "$XFORM" "$COMP" "$newseed.png
fi
echo $cmd
$cmd
$ cat patterns.txt
BRICKS
CHECKERBOARD
CIRCLES
CROSSHATCH
CROSSHATCH30
CROSSHATCH45
FISHSCALES
GRAY0
GRAY5
GRAY10
GRAY15
GRAY20
GRAY25
GRAY30
GRAY35
GRAY40
GRAY45
GRAY50
GRAY55
GRAY60
GRAY65
GRAY70
GRAY75
GRAY80
GRAY85
GRAY90
GRAY95
GRAY100
HEXAGONS
HORIZONTAL
HORIZONTAL2
HORIZONTAL3
HORIZONTALSAW
HS_BDIAGONAL
HS_CROSS
HS_DIAGCROSS
HS_FDIAGONAL
HS_HORIZONTAL
HS_VERTICAL
LEFT30
LEFT45
LEFTSHINGLE
OCTAGONS
RIGHT30
RIGHT45
RIGHTSHINGLE
SMALLFISHSCALES
VERTICAL
VERTICAL2
VERTICAL3
VERTICALBRICKS
VERTICALLEFTSHINGLE
VERTICALRIGHTSHINGLE
VERTICALSAW