[ Index ]
 

Code source de jpGraph 2.2

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/src/ -> jpgraph_led.php (source)

   1  <?php
   2  //=======================================================================
   3  // File:    JPGRAPH_LED.PHP
   4  // Description:    Module to generate Dotted LED-like digits
   5  // Created:     2006-11-26
   6  // Ver:        $Id: jpgraph_led.php 804 2006-11-26 20:17:26Z ljp $
   7  //
   8  // Copyright 2006 (c) Aditus Consulting. All rights reserved.
   9  //========================================================================
  10  
  11  // Constants for color schema
  12  DEFINE('LEDC_RED',0);
  13  DEFINE('LEDC_GREEN',1);
  14  DEFINE('LEDC_BLUE',2);
  15  DEFINE('LEDC_YELLOW',3);
  16  DEFINE('LEDC_GRAY',4);
  17  
  18  //========================================================================
  19  // CLASS DigitalLED74
  20  // Description: 
  21  // Construct a number as an image that looks like LED numbers in a
  22  // 7x4 digital matrix
  23  //========================================================================
  24  class DigitalLED74 {
  25      private $iLED_X = 4, $iLED_Y=7,
  26      
  27      $iLEDSpec = array( 0 => array(6,9,9,9,9,9,6),
  28                 1 => array(2,6,10,2,2,2,2),
  29                 2 => array(6,9,1,2,4,8,15),
  30                 3 => array(6,9,1,6,1,9,6),
  31                 4 => array(1,3,5,9,15,1,1),
  32                 5 => array(15,8,8,14,1,9,6),
  33                 6 => array(6,8,8,14,9,9,6),
  34                 7 => array(15,1,1,2,4,4,4),
  35                 8 => array(6,9,9,6,9,9,6),
  36                 9 => array(6,9,9,7,1,1,6), 
  37                 '.' => array(0,0,0,0,0,3,3),
  38                 ' ' => array(0,0,0,0,0,0,0),
  39                 '#' => array(0,9,15,9,15,9,0),
  40                 'A' => array(6,9,9,15,9,9,9),
  41                 'B' => array(14,9,9,14,9,9,14),
  42                 'C' => array(6,9,8,8,8,9,6),
  43                 'D' => array(14,9,9,9,9,9,14),
  44                 'E' => array(15,8,8,14,8,8,15),
  45                 'F' => array(15,8,8,14,8,8,8),
  46                 'G' => array(6,9,8,8,11,9,6),
  47                 'H' => array(9,9,9,15,9,9,9),
  48                 'I' => array(14,4,4,4,4,4,14),
  49                 'J' => array(15,1,1,1,1,9,6),
  50                 'K' => array(8,9,10,12,12,10,9),
  51                 'L' => array(8,8,8,8,8,8,15)    ),
  52  
  53      $iColorSchema = array(0 => array('red','darkred:0.9','red:0.3'),
  54                    1 => array('green','darkgreen','green:0.3'),
  55                    2 => array('lightblue:0.9','darkblue:0.85','darkblue:0.7'), 
  56                    3 => array('yellow','yellow:0.4','yellow:0.3'), 
  57                    4 => array('gray:1.4','darkgray:0.85','darkgray:0.7')),
  58  
  59      $iSuperSampling = 3, $iMarg = 1, $iRad = 4 ;
  60      
  61      function DigitalLED74($aRadius=2,$aMargin=0.6) {
  62      $this->iRad = $aRadius;
  63      $this->iMarg = $aMargin;
  64      }
  65  
  66      function SetSupersampling($aSuperSampling=2) {
  67      $this->iSuperSampling = $aSuperSampling;
  68      }
  69  
  70      function _GetLED($aLedIdx,$aColor=0) {
  71  
  72      if( $aColor < 0 || $aColor > 4 ) 
  73          $aColor = 0 ;
  74  
  75      $width=  $this->iLED_X*$this->iRad*2 +  ($this->iLED_X+1)*$this->iMarg + $this->iRad ;
  76      $height= $this->iLED_Y*$this->iRad*2 +  ($this->iLED_Y+1)*$this->iMarg + $this->iRad * 2;
  77  
  78      // Adjust radious for supersampling
  79      $rad = $this->iRad * $this->iSuperSampling;
  80  
  81      // Margin in between "Led" dots
  82      $marg = $this->iMarg * $this->iSuperSampling;
  83      
  84      $swidth = $width*$this->iSuperSampling;
  85      $sheight = $height*$this->iSuperSampling;
  86  
  87      $simg = new RotImage($swidth,$sheight,0,DEFAULT_GFORMAT,false);
  88      $simg->SetColor($this->iColorSchema[$aColor][2]);
  89      $simg->FilledRectangle(0,0,$swidth-1,$sheight-1);
  90  
  91  
  92      $d = $this->iLEDSpec[$aLedIdx];
  93  
  94      for( $r = 0 ; $r < 7; ++$r ) {
  95  
  96          $dr = $d[$r];
  97  
  98          for($c=0; $c < 4; ++$c ) {
  99  
 100          if( ($dr & pow(2,3-$c)) !== 0 ) {
 101              $color = $this->iColorSchema[$aColor][0];
 102          }
 103          else {
 104              $color = $this->iColorSchema[$aColor][1];
 105          }
 106  
 107          $x = 2*$rad*$c+$rad + ($c+1)*$marg + $rad ;
 108          $y = 2*$rad*$r+$rad + ($r+1)*$marg + $rad ;
 109  
 110          $simg->SetColor($color);
 111          $simg->FilledCircle($x,$y,$rad);
 112  
 113          }
 114      }
 115      
 116      $img =  new Image($width,$height,DEFAULT_GFORMAT,false);
 117      $img->Copy($simg->img,0,0,0,0,$width,$height,$swidth,$sheight);
 118      $simg->Destroy();
 119      unset($simg);
 120      return $img;
 121      }
 122  
 123      function StrokeNumber($aValStr,$aColor=0) {
 124      $n=strlen($aValStr);
 125      for( $i=0 ; $i < $n; ++$i ) {
 126          $d = substr($aValStr,$i,1);
 127          if( ctype_digit($d) )
 128          $d = (int)$d;
 129          else {
 130          $d = strtoupper($d);
 131          if( $d != '#' && $d != '.' && ($d < 'A' || $d > 'L') )
 132              $d = ' ';
 133          }
 134          $digit_img[$i] = $this->_GetLED($d,$aColor);
 135      }
 136      
 137      $w = imagesx($digit_img[0]->img);
 138      $h = imagesy($digit_img[0]->img);
 139  
 140      $number_img = new Image($w*$n,$h,DEFAULT_GFORMAT,false);
 141  
 142      for($i=0; $i < $n; ++$i ) {
 143          $number_img->Copy($digit_img[$i]->img,$i*$w,0,0,0,$w,$h,$w,$h);
 144      }
 145      
 146      $number_img->Headers();
 147      $number_img->Stream();
 148      
 149      }
 150  }
 151  
 152  
 153  ?>


Généré le : Sat Nov 24 09:27:55 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics