login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > GD library > Analoge meter

Analoge meter

Auteur: Tumbler - 05 maart 2007 - 19:28 - Gekeurd door: Joel - Hits: 6114 - Aantal punten: 4.67 (3 stemmen)



Dit script tekent een analoge meter. De stand van de wijzer, meter id en -caption en de maximale waarde die de meter aankan worden via $_GET verwerkt.

Ik kan geen voorbeeld plaatsen (misschien iets voor een of ander mod die deze online wil plaatsen), wel heb ik enkele screenshots:

http://users.te...enshot.jpg
http://users.te...nshot2.jpg

Script, plaatje en voorbeeld kunnen gedownload worden; alles staat in een zip file

Code:
  1. <?php
  2. // variabelen ophalen
  3. if (isset($_GET['innercaption']) && isset($_GET['outercaption'])){
  4. $innercaption = $_GET['innercaption']; // meter caption
  5. $outercaption = $_GET['outercaption']; // meter id
  6. }
  7. else {
  8. $er="Error 0";
  9. }
  10. if (strlen($innercaption) >7) { // lengte van innercaption groter dan 7
  11. $innercaption = substr ($innercaption, 0, 4)."..."; // afkappen dan!
  12. }
  13.  
  14. if (strlen($outercaption) >20) { // lengte van outercaption groter dan 20
  15. $outercaption = substr ($outercaption, 0, 17)."..."; // afkappen dan!
  16. }
  17.  
  18. $strfill=""; //innercaption lengte op 7 tekens zetten
  19. if (strlen($innercaption)<7){
  20. $i = (7-strlen($innercaption))/2;
  21. $strfill = str_repeat (' ', $i);
  22. }
  23. $innercaption = $strfill. $innercaption . $strfill;
  24.  
  25. $strfill=""; //outercaption lengte op 20 tekens zetten
  26. if (strlen($outercaption)<20){
  27. $i = (20-strlen($outercaption))/2;
  28. $strfill = str_repeat (' ', $i);
  29. }
  30. $outercaption = $strfill. $outercaption . $strfill;
  31.  
  32. // ophalen en berekenen van analoge en digitale waardes
  33.  
  34.  
  35. if (isset($_GET['max']) && is_numeric($_GET['max'])){
  36. $max_value = $_GET['max']; // maximale waarde
  37. }
  38. else {
  39. $er="Error 1";
  40. }
  41. if (isset($_GET['value']) && is_numeric($_GET['value'])){
  42. $dig_value = $_GET['value']; // deze waarde is de digitale waarde
  43. if ($dig_value < 0) {
  44. $er="Error 2";
  45. }
  46. }
  47. else {
  48. $er="Error 3";
  49. }
  50.  
  51. if ($max_value == 0 && $dig_value== 0) { // als de max waarde gelijk is aan de werkelijke waarde
  52. $er="Error 4";
  53. $dig_value = 1; // dan zetten we ze gelijk aan 1 om errors te voorkomen
  54. $max_value = 1;
  55. }
  56.  
  57. if ($max_value<$dig_value){ // max waarde kleiner dan werkelijke waarde?
  58. $er = "Error 5";
  59. $dummy = $max_value; // swap deze dan...
  60. $max_value = $dig_value;
  61. $dig_value = $dummy;
  62. }
  63. $max_value = 540/$max_value;
  64. $ana_value = $dig_value * $max_value; // deze waarde is nodig voor de wijzer
  65.  
  66. $dig_value = round($dig_value,2); // waarde afronden tot op 2 cijfers na de comma
  67.  
  68. //ophalen van zones
  69. if (isset($_GET['green']) && is_numeric($_GET['green'])){
  70. $zone_green = $_GET['green'];
  71. $total = $zone_green;
  72. $zone_green = 135+((270 * $zone_green)/100);
  73. }
  74. if (isset($_GET['red']) && is_numeric($_GET['red'])){
  75. $zone_red = $_GET['red'];
  76. $total += $zone_red;
  77. $zone_red = 405-((270 * $zone_red)/100);
  78.  
  79. }
  80.  
  81. if ($total >100){
  82. $er="Error 6";
  83. }
  84. //Hieronder niets meer veranderen indien je niet
  85. //vertrouwd bent met GD2
  86. header("Content-type: image/jpg");
  87.  
  88. // meter image ophalen
  89. $bgImg = imageCreateFromJpeg("images/gauge.jpg");
  90.  
  91. // kleuren aanmaken
  92. $black=imagecolorallocatealpha($bgImg, 20,20,20,0);
  93. $black_alpha=imagecolorallocatealpha($bgImg, 0,0,0,30);
  94.  
  95. $red = imagecolorallocatealpha($bgImg, 255, 0,0,20);
  96. $white = imagecolorallocatealpha($bgImg, 255, 255,255,0);
  97. $grey = imagecolorallocatealpha($bgImg, 63, 63,63,80);
  98. $green = imagecolorallocatealpha($bgImg, 0, 255,0,0);
  99. $blue = imagecolorallocatealpha($bgImg, 0, 0,255,0);
  100.  
  101. $light_grey = imagecolorallocatealpha($bgImg, 192, 192,192,50);
  102. $dark_green = imagecolorallocatealpha($bgImg, 0, 100,0,30);
  103. $dark_red = imagecolorallocatealpha($bgImg, 100, 0,0,20);
  104. $dark_orange = imagecolorallocatealpha($bgImg, 100,100,0,20);
  105. $dark_blue = imagecolorallocatealpha($bgImg, 0, 0,200,80);
  106. if ($er){
  107. $box = imageTTFBbox(9, 0, "fonts/digistrip.ttf", $er);
  108. $width = abs($box[4] - $box[0]);
  109. ImageTTFText($bgImg, 9, 0, 71-($width/2), 95, $dark_red,
  110. "fonts/digistrip.ttf", $er);
  111. ImageTTFText($bgImg, 9, 0, 70-($width/2), 94, $red,
  112. "fonts/digistrip.ttf", $er);
  113.  
  114. //ImageTTFText($bgImg, 20, 15,30,80,$dark_red,"fonts/tahoma.ttf",$er);
  115. //ImageTTFText($bgImg, 20, 15,28,78,$red,"fonts/tahoma.ttf",$er);
  116.  
  117. }
  118. else{
  119. if($zone_red){
  120. imagefilledarc($bgImg, 70, 62, 90, 90, $zone_red,405, $dark_red, IMG_ARC_PIE); // rode zone
  121. }
  122.  
  123. if ($zone_red && $zone_green){
  124. imagefilledarc($bgImg, 70, 62, 90, 90, $zone_green, $zone_red, $dark_orange, IMG_ARC_PIE); // oranje zone
  125. }
  126.  
  127. if($zone_green){
  128. imagefilledarc($bgImg, 70, 62, 90, 90, 135, $zone_green, $dark_green, IMG_ARC_PIE);// groene zone
  129. }
  130.  
  131. imagefilledarc($bgImg, 70, 62, 82, 82, 135, 405, $black_alpha, IMG_ARC_PIE);
  132.  
  133. //center plaatsen
  134. imageellipse($bgImg, 69, 61, 20, 20, $light_grey); // highlight
  135. imagefilledellipse($bgImg, 70, 62, 20, 20, $black); //center
  136.  
  137. //meter captions
  138. $box = imageTTFBbox(10, 0, "fonts/tahoma.ttf", $innercaption);
  139. $width = abs($box[4] - $box[0]);
  140. ImageTTFText($bgImg, 10, 0, 70-($width/2), 108, $white,
  141. "fonts/tahoma.ttf", $innercaption);
  142.  
  143. //ImageTTFText($bgImg, 10, 0,55,108,$white,"fonts/tahoma.ttf",$innercaption);
  144. $box = imageTTFBbox(9, 0, "fonts/digistrip.ttf", $outercaption);
  145. $width = abs($box[4] - $box[0]);
  146. ImageTTFText($bgImg, 9, 0, 70-($width/2), 145, $black,
  147. "fonts/digistrip.ttf", $outercaption);
  148. ImageTTFText($bgImg, 9, 0, 69-($width/2), 144, $white,
  149. "fonts/digistrip.ttf", $outercaption);
  150. //ImageTTFText($bgImg, 8, 0,20,140,$black,"fonts/digistrip_b.ttf",$outercaption); //schaduw voor outercaption
  151. //ImageTTFText($bgImg, 8, 0,19,138,$white,"fonts/digistrip_b.ttf",$outercaption); //outercaption
  152.  
  153.  
  154. // variabelen voor wijzer berekenen
  155. $p = 270+$ana_value;
  156. $x1 = round((cos(($p-20) * 3.14/360)*15)+70,0); // punt 1 voor polygon
  157. $y1 = round((sin(($p-20) * 3.14/360)*15)+62,0);
  158.  
  159. $x2 = round((cos(($p+20) * 3.14/360)*15)+70,0); // punt 2 voor polygon
  160. $y2 = round((sin(($p+20) * 3.14/360)*15)+62,0);
  161.  
  162. $x3 = round((cos($p * 3.14/360)*40)+70,0); // punt 3 voor polygon
  163. $y3 = round((sin($p * 3.14/360)*40)+62,0);
  164.  
  165. //array maken voor berekende polygon punten
  166. $values = array(
  167. $x1, $y1, // Point 1 (x, y) //wijzer coordinaten
  168. $x2, $y2, // Point 2 (x, y)
  169. $x3, $y3, // Point 3 (x, y)
  170. );
  171. $values_shadow = array(
  172. $x1+1, $y1+1, // Point 1 (x, y) //schaduw voor wijzer
  173. $x2+1, $y2+1, // Point 2 (x, y)
  174. $x3+1, $y3+1, // Point 3 (x, y)
  175. );
  176.  
  177. // een rode wijzer tekenen
  178. imagefilledpolygon($bgImg, $values_shadow, 3, $black_alpha); // schaduw tekenen
  179. imagefilledpolygon($bgImg, $values, 3, $red); // de wijzer tekenen
  180.  
  181. // digitale meterstand
  182. $box = imageTTFBbox(9, 0, "fonts/digistrip.ttf", $dig_value);
  183. $width = abs($box[4] - $box[0]);
  184. ImageTTFText($bgImg, 9, 0, 71-($width/2), 95, $dark_green,
  185. "fonts/digistrip.ttf", $dig_value);
  186. ImageTTFText($bgImg, 9, 0, 70-($width/2), 94, $green,
  187. "fonts/digistrip.ttf", $dig_value);
  188.  
  189. }
  190.  
  191. //laat plaatje zien
  192. Imagejpeg($bgImg,"",100);
  193.  
  194. //en destroy het weer
  195. imagedestroy($bgImg);
  196. ?>
Download code! Download code (.txt)

Download dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Geen reacties (0)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.048s