. /** * Generate random grades and feedback to initialize development environment * @package local_treestudyplan * @copyright 2023 P.M. Kuipers - Chris Zuber * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace local_treestudyplan\local; use Exception; /** * Generate random grades and feedback to initialize development environment */ class randomimage { /** * Image width * @var integer */ private $width; /** * Image height * @var integer */ private $height ; /** * Number of shapes to draw * @var integer */ private $shapes; /** * Image name * @var string */ public $name; /** * Image temporary file * @var string */ public $tempfile; /** * Various available styles for arcs * @var Arary */ const ARC_STYLES = [ IMG_ARC_PIE, IMG_ARC_CHORD, IMG_ARC_EDGED, IMG_ARC_NOFILL ]; /** * Create a random polygon with number of points between 0 & $max_pts * @param \GdImage $im The image reource * @param integer $max_pts Max number of point to use * @return void */ private function random_polygon($im, Int $max_pts = 20) { $color = imagecolorallocatealpha($im, ...$this->random_color_alpha()); $pts = $this->random_pts(\random_int(3, $max_pts)); imagefilledpolygon($im, $pts, $color); } /** * Creates a random arc of a random color * @param \GdImage $im The image resource * @return void */ private function random_arc($im) { $cx = \random_int(0, $this->width); $cy = \random_int(0, $this->height); $w = \random_int(0, $this->width); $h = \random_int(0, $this->height); $s = \random_int(0, 360); $e = \random_int(0, 360); $col = imagecolorallocatealpha($im, ...$this->random_color_alpha()); $style = self::ARC_STYLES[\random_int(0, 3)]; imagefilledarc($im, $cx, $cy, $w, $h, $s, $e, $col, $style); } /** * Generates an array of random alpha color values. * @return Array [r, g, b, a] */ private function random_color_alpha(): Array { return [ \random_int(0, 255), \random_int(0, 255), \random_int(0, 255), \random_int(0, 127) ]; } /** * Generates a set of random points for a polygon [x1,y1, x2,y2,...] * @param integer $length Number of sets of points to generate * @return Array The resulting array of points */ private function random_pts($length): Array { $pts = []; for($n = 0; $n < $length; $n++) { $pts[] = \random_int(0, $this->width); $pts[] = \random_int(0, $this->height); } return $pts; } public function __construct($shapes=3,$width=256,$height=256) { $this->shapes = $shapes; $this->width = $width; $this->height = $height; $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $string = ''; for ($i = 0; $i < 20; $i++) { $string .= $characters[\mt_rand(0, strlen($characters) - 1)]; } $this->name = $string.".png"; $im = imagecreatetruecolor($this->width, $this->height); for ($i = 0; $i < $this->shapes; $i++) { switch(\random_int(1, 2)) { case 1: $this->random_arc($im); break; case 2: $this->random_polygon($im); break; } } $this->tempfile = \tempnam("/tmp","tsp"); imagepng($im,$this->tempfile); imagedestroy($im); } public function content() { return $this->content = \file_get_contents($this->tempfile); } public function __destruct() { if (isset($this->tempfile) && file_exists($this->tempfile)) { unlink($this->tempfile); } } }