jul/ext/ppdgauge.php
2023-08-06 22:14:23 +02:00

216 lines
6.8 KiB
PHP

<?php
chdir("../");
require "lib/function.php";
//$sql->selectdb("sonicret_s2bivb");
if ($_GET['s']) $size = $_GET['s'];
if ($size > 1024 || $size < 80) $size = 255;
if ($_GET['t']) $classt = $_GET['t'];
if ($classt > 9999 || $classt < 10) $classt = 500;
$size = 255;
$classt = 500;
$class = $sql->resultq("SELECT COUNT(`id`) FROM `posts` WHERE `date` > ". (ctime() - 86400));
if ($_GET['s']) $size = numrange((int)$_GET['s'], 80, 1024);
if ($_GET['t']) $classt = numrange((int)$_GET['t'], 10, 1000);
$classtxt = " ppd ";
$image = imagecreatetruecolor( $size + 1, $size + 1 );
imageantialias($image, true);
imagesavealpha($image, true);
imagealphablending($image, false);
$color['white'] = imagecolorallocate($image, 255, 255, 255);
$color['black'] = imagecolorallocate($image, 0, 0, 0);
$color['gray1'] = imagecolorallocate($image, 40, 40, 40);
$color['gray2'] = imagecolorallocate($image, 120, 120, 120);
$color['gray3'] = imagecolorallocate($image, 230, 230, 230);
$color['red'] = imagecolorallocate($image, 255, 100, 100);
$color['blue'] = imagecolorallocate($image, 125, 125, 255);
imagefilledrectangle($image, 0, 0, $size+1, $size+1, imagecolorallocatealpha($image, 0, 0, 0, 127));
imagealphablending($image, true);
$point = anglepos($size / 3, $size/2, $size/2, 90+45);
// drawgauge($size/2, $size/2, $size, 180, 270);
drawgauge($size/2, $size/2, $size, 180 - 45, 270);
// drawgauge($point['x'], $point['y'], $size / 3, 180, 270);
function drawgauge($xpos, $ypos, $size, $startangle, $endangle) {
global $image, $color, $class, $classt, $classtxt;
// $startangle = 90;
$endangle = $startangle + $endangle;
$angsize = $endangle - $startangle;
$radius = $size / 2;
imagefilledarc($image, $xpos, $ypos, $size, $size, 0, 360, $color['gray1'], IMG_ARC_PIE);
imagearc ($image, $xpos, $ypos, $size, $size, 0, 360, $color['black']);
for ($i = 0; $i <= 100; $i ++) {
if ($i % 5 == 0) {
$c = $color['white'];
$l = 10;
} else {
$c = $color['black'];
$l = 0;
}
if ($i >= 0 && $i <= 99) {
if ($i <= 24) {
$cx = ($i) / 25 * 255;
$cc = imagecolorallocate($image, 255, $cx, 0);
} elseif ($i <= 49) {
$cx = ($i - 25) / 25 * 127;
$cc = imagecolorallocate($image, 255 - $cx, 255 - $cx, $cx);
} elseif ($i <= 74) {
$cx = ($i - 50) / 25 * 31;
$cc = imagecolorallocate($image, 128 - $cx, 128 - $cx, 128 + $cx);
} else {
$cx = ($i - 75) / 25 * 95;
$cc = imagecolorallocate($image, 95 - $cx, 95 - $cx, 255 - $cx);
}
$r = $i * ($angsize * .01) - $startangle + ($angsize * .01);
$q[0] = anglepos($radius - 3, $xpos, $ypos, $r);
$q[1] = anglepos($radius - 3 - 5, $xpos, $ypos, $r);
$r = $i * ($angsize * .01) - $startangle - 1;
$q[2] = anglepos($radius - 3, $xpos, $ypos, $r);
$q[3] = anglepos($radius - 3 - 5, $xpos, $ypos, $r);
$pts = array(
$q[0]['x'], $q[0]['y'],
$q[2]['x'], $q[2]['y'],
$q[3]['x'], $q[3]['y'],
$q[1]['x'], $q[1]['y'],
);
// imageline($image, $p1['x'], $p1['y'], $p2['x'], $p2['y'], $cc);
// imageline($image, $p1['x'], $p1['y'], $p2['x'], $p2['y'], $cc);
imagefilledpolygon($image, $pts, 4, $cc);
// imageline($image, $q[0]['x'], $q[0]['y'], $q[3]['x'], $q[3]['y'], $cc);
}
$r = $i * ($angsize * .01) - $startangle;
$p1 = anglepos($radius - 3, $xpos, $ypos, $r);
$p2 = anglepos($radius - 3 - $l, $xpos, $ypos, $r);
imageline($image, $p1['x'], $p1['y'], $p2['x'], $p2['y'], $c);
$markers = ($size < 255 ? 25 : 10);
if ($i % $markers == 0) {
$p3 = anglepos($radius - 20, $xpos, $ypos, $r);
$p4 = anglepos($radius - 42, $xpos, $ypos, $r);
$n = round($classt * ($i/100)) ."";
$nl = strlen($n);
$x = 2 + (3.5 * ($nl - 1));
imagestring($image, 3, $p3['x'] - $x, $p3['y'] - 7, $n, $color['white']);
}
}
$rad = 45;
// imageline($image, $radius, $radius, $point['x'], $point['y'], $color['black']);
// drawneedle($houra, $radius, $radius, $radius - 30, 7, - 3, $color['black']);
// drawneedle($mina, $radius, $radius, $radius - 5, 5, - 5, $color['black']);
// drawneedle($seca, $radius, $radius, $radius - 2, 4, -10, $color['red']);
$ang = @(min($classt, $class)/$classt) * $angsize - $startangle;
drawneedle($ang, $xpos, $ypos, $radius - 2, 5, -20, $color['blue']);
if ($size >= 128) {
imagestring($image, 1, $size / 2 - 26, $size * .7 + 4 , $classtxt, $color['white']);
// if (!$_GET['p']) imagestring($image, 1, $size / 2 + 14, $size * .7 + 16, "%", 0xcccccc);
digits($size * .50 - 12, $size * .7 + 14, $class, 3, 0);
} else {
digits($size * .50 - 12, $size * .7 + 9, $class, 3, 0);
}
}
// imagestring($image, 1, $size / 2 - 42, $size * .93 - 10, date("m/d/y H:i:s", time()), 0xcccccc);
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
function anglepos($radius, $origo_x, $origo_y, $angle) {
// $angle += 90;
$radius--;
$pont['x'] = $origo_x + ($radius * sin(deg2rad($angle)));
$pont['y'] = $origo_y - ($radius * cos(deg2rad($angle)));
return $pont;
}
function drawneedle($angle, $cx, $cy, $radius, $width, $tail, $color) {
global $image;
$point = anglepos($tail * -1, $cx, $cy, $angle + 180);
$width *= .75;
$point1 = anglepos($width, $point['x'], $point['y'], $angle - 90);
$point2 = anglepos($width, $point['x'], $point['y'], $angle + 90);
$point3 = anglepos($radius, $cx, $cy, $angle);
// $point3 = anglepos($radius, $cx, $cy, $angle - .5);
// $point4 = anglepos($radius, $cx, $cy, $angle + .5);
$point9 = anglepos($radius - 4, $cx, $cy, $angle);
$points = array(
$point1['x'], $point1['y'],
// $point['x'], $point['y'],
$point2['x'], $point2['y'],
// $point4['x'], $point4['y'],
$point3['x'], $point3['y'],
);
imagefilledpolygon($image, $points, 3, $color);
imagepolygon($image, $points, 3, $color);
imageline($image, $point9['x'], $point9['y'], $cx, $cy, 0xffffff);
// imagefilledpolygon($image, $points, 3, $color);
}
function digits($x, $y, $n, $l = 4, $d = 2, $overlay = false) {
global $image;
$numimage = imagecreatefrompng("images/digits4.png");
$n = number_format($n, $d);
$n = str_replace(",", "", $n);
$n2 = explode(".", $n);
$big = str_pad($n2[0], $l, ":", STR_PAD_LEFT);
$len = strlen($big);
for($o = 0; $o < $len; $o++) {
$chrpos = ord($big{$o}) - 48;
imagecopy($image, $numimage, $x + ($o * 8), $y, $chrpos * 9, 0, 8, 14);
}
$small = $n2[1];
$slen = strlen($small) + $o - 1;
for(; $o <= $slen; $o++) {
$lp = $o - $len;
imagecopy($image, $numimage, $x + $o * 8, $y, $small{$lp} * 9, 14, 8, 14);
}
$maxlen = strlen($big) + strlen($small);
imagerectangle($image, $x - 1, $y - 1, $x + $maxlen * 8, $y + 14, 0x000000);
if ($overlay) imagefilledrectangle($image, $x, $y, $x + $maxlen * 8 - 1, $y + 13, $overlay);
}