2020/03/11 15:21
10 different icons:
mt_srand(); // random seed
$pixel_size = 2;
$width = $mat_w = 16;
$height = $mat_h = 16;
$img = imagecreatetruecolor($width, $height);
$col_min = 60;
$col_max = 200;
// color palette generation
$colors = [];
// starting colors
$num_of_generators = mt_rand(2, 12);
// final palette size
$num_of_colors = mt_rand(8, 16);
while ($num_of_colors <= $num_of_generators) $num_of_colors = mt_rand(8, 16);
$palette = imagecreatetruecolor($num_of_generators, 1);
// generate starting colors
for ($c=0; $c < $num_of_generators; $c++)
{
imagesetpixel(
$palette,
$c,
0,
imagecolorallocate(
$palette,
mt_rand($col_min, $col_max) / ($c/2 + 1),
mt_rand($col_min, $col_max) / ($c/2 + 1),
mt_rand($col_min, $col_max) / ($c/2 + 1)
)
);
}
$palette = imagescale($palette, 100 * $num_of_generators, 1, IMG_BILINEAR_FIXED);
$palette = imagescale($palette, $num_of_colors, 1, IMG_BILINEAR_FIXED);
$rnd = 0;
for ($c=0; $c < $num_of_colors; $c++)
{
$colors[] = imagecolorat($palette, $c + $rnd, 0);
}
imagefilledrectangle($img, 0, 0, $width, $height, $colors[0]);
$goldColors = array(
imagecolorallocate($img, 255, 222, 154),
imagecolorallocate($img, 193, 154, 71),
imagecolorallocate($img, 159, 126, 54)
);
$pattern_matrix = array(
0 => array('x','x','x','x','x','x','x','x'),
1 => array('x','p','p','a','p','a','a','a'),
2 => array('x','p','p','p','r','r','r','r'),
3 => array('x','a','p','r','r','r','r','r'),
4 => array('x','p','r','r','r','r','r','r'),
5 => array('x','a','r','r','r','r','r','r'),
6 => array('x','a','r','r','r','r','r','r'),
7 => array('x','a','r','r','r','r','r','r'),
);
$gold = false;
for($x = 0; $x < 8; $x++)
{
for($y = 0; $y < 8; $y++)
{
$gold = false;
$selcol = 0;
switch($pattern_matrix[$x][$y])
{
case 'o': $selcol = 0; break;
case 'r': $selcol = mt_rand(0, $num_of_colors - 1); break;
case 'x': $selcol = $gold = true; break;
case 'p': $selcol = $num_of_colors - 1; $gold = mt_rand(0, 2) === 0; break;
default: $selcol = $num_of_colors - 1; break;
}
if($gold){
$goldColor = $goldColors[mt_rand(0, 2)];
imagesetpixel($img, $x, $y, $goldColor);
imagesetpixel($img, $width - 1 - $x, $y, $goldColor);
imagesetpixel($img, $x, $height - 1 - $y, $goldColor);
imagesetpixel($img, $width - 1 - $x, $height - 1 - $y, $goldColor);
}else{
imagesetpixel($img, $x, $y, $colors[$selcol]);
imagesetpixel($img, $width - 1 - $x, $y, $colors[$selcol]);
imagesetpixel($img, $x, $height - 1 - $y, $colors[$selcol]);
imagesetpixel($img, $width - 1 - $x, $height - 1 - $y, $colors[$selcol]);
}
}
}
// apply resolution multiplier (pixel size)
$img = imagescale($img, $width * $pixel_size, $height * $pixel_size, IMG_NEAREST_NEIGHBOUR);
// set content header: this file will not load like a normal html page, it will output a png file
header("Content-type: image/png");
// output image
imagepng($img);
// destroy images
imagedestroy($img);
imagedestroy($palette);