cijfers omzetten in 7 segmenten

Door Ren , 14 jaar geleden, 2.653x bekeken

Met behulp van de GD library cijfers omzetten naar 7 segmenten zoals gebruikt op klokken, multi_meters e.d.
Zie ook de tutorial http://www.kiekkast.nl/Tutorial

Voorbeeld: http://www.kiekkast.nl/Indicators

Gesponsorde koppelingen

PHP script bestanden

  1. cijfers-omzetten-in-7-segmenten

 

Er zijn 9 reacties op 'Cijfers omzetten in 7 segmenten'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Eddy E
Eddy E
14 jaar geleden
 
0 +1 -0 -1
Gaaf resultaat!

Nog wel een tip:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    if (strlen($value) == 1)                 // if there is one character
    {
        $value_1 = substr($value,0,1);  
    }

  
//... etc

    if (strlen($value) == 9)
    {

        $value_1 = substr($value,8,1);
        $value_2 = substr($value,7,1);
        $value_3 = substr($value,6,1);
        $value_4 = substr($value,5,1);
        $value_5 = substr($value,4,1);
        $value_6 = substr($value,3,1);
        $value_7 = substr($value,2,1);
        $value_8 = substr($value,1,1);
        $value_9 = substr($value,0,1);
    }

?>



Kan vervangen worden door:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$values_separate
= explode("", $value);
foreach($values_separate AS $key => $getal)
    {

    $var = "value_" . ($key + 1);
    $$var = $getal;
    }

?>
Arian Stolwijk
Arian Stolwijk
14 jaar geleden
 
0 +1 -0 -1
Ziet er best leuk uit ;)

Vraag me alleen af of je niet net zo goed een .ttf bestandje kunt gebruiken zoals bijvoorbeeld deze: http://www.dafont.com/digital-7.font

Dat zou je dan met de imagettftext vrij makkelijk kunnen gebruiken lijkt me...
Han eev
Han eev
14 jaar geleden
 
0 +1 -0 -1
Leuk bedacht en ziet er leuk uit,
maar volgens mij kan het allemaal wel effecienter, sneller, korter, loopjes en dat soort dingen.

En bij de laatste regel Ga je de resultaten bitwise vergelijken met de | (or), het kan wel, maar ik weet niet helemaal of dat de bedoeling is, voorbeeld:

true | true | false | true | false | true = true
Want false | false = 0 en false | true =1 en true | true = 1
Het zal dus altijd waar zijn en waarom vergelijk je getallen met quotes eromheen? $var == '0' kan toch korter met $var == 0 (scheelt typ-werk en is sneller)

Nou dat waren even korte opmerkingen.

@eddy:
Dat is ook niet echt netjes hè, met $$ werken, daarvoor hebben we array's tegenwoordig ;-)
Eddy E
Eddy E
14 jaar geleden
 
0 +1 -0 -1
Weet ik, maar dan moet heel het script weer verbouwd worden ;).
Ik zou zelf ook met $value[1] etc werken ;).
Ren
Ren
14 jaar geleden
 
0 +1 -0 -1
Bedankt voor alle opmerkingen.
Het letttertype van Arjan heb ik naar gezocht maar niet gevonden, vandaar dat ik dit gemaakt heb. Ik vind de segementen bij dit lettertype een beetje te dun. Zelfs in bolt.
Verder zullen dingen wel effecienter kunnen, maar ik heb nog niet zoveel ervaring met PHP. Ik probeer hier iets van op te steken.

René.
Tikkes C
Tikkes C
14 jaar geleden
 
0 +1 -0 -1
Gaaf ding ;-)

1 opmerking: cathegorie beginners?! beter gevorderden zou ik denken...
Ren
Ren
14 jaar geleden
 
0 +1 -0 -1
Nou Han, ik geloof dat mijn vergelijkingen met | wel goed zijn, anders zouden in alle gevallen er 7 segmenten weer gegeven worden en dat is niet zo.

Hetvolgende voor Eddy.
Ik heb de functie explode geprobeerd, maar die werk niet als er geen scheidingteken is gedefinieerd. Het volgende script geeft als fout:

Warning: explode() [function.explode]: Empty delimiter
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$value
= 125;
$values_separate = explode("", $value);
foreach($values_separate AS $key => $getal)
    {

    $var = "value_" . ($key + 1);
    $$var = $getal;
    echo "$getal<br>";
    }


?>


Ik lees hier http://nl2.php.net/manual/en/function.explode.php dat expode niet werkt zonder delimiter en alleen op een string. Het werkt dus sowieso niet op $value = 123; Dat is namelijk geen srtring.
Dit b.v. is wel een string $value = "123";

René
Martijn B
Martijn B
14 jaar geleden
 
0 +1 -0 -1
$value kun je ook benaderen als array.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
echo $value[0]; // 1
echo $value[2]; // 5

$i = 0;
while( isset($value[$i]) )
{

  echo $value[$i];
  ++
$i;
}

?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Ren
Ren
14 jaar geleden
 
0 +1 -0 -1
Ik heb het script weten te halveren. Al doende leert men.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php

  $value
= '486';                // shown value max 9 characters
  
  if($value == ''){$empty ="yes"; } else {$empty = "no";}
  
  $length = strlen($value);       // numbers of caracters

  // set the dimension of the character

  $a =4;                          // smaller then 3 gives a poor result. this value is the width of a segment in pixels
  
  // set the correction of the dimension of the image. 0 is default

  $width_corr  = '0';             // correction of the width of the image in pixels + or -
  $height_corr = '0';             // correction of the height of the image in pixels + or -
  
  // set the correction of the first (right) character. 0 is default

  $hor_corr  = 0;                 // horizontal correction for the first (right) character in pixels + or -
  $vert_corr = 0;                 // vertical correction for the first (right) character in pixels + or -

  if($empty == 'yes')
{

    $width = 100;
    $height = 30;
}

  elseif ($length > 9)
{

    $width = 110;
    $height = 50;
}

else
{
  $width  = $a*7.5*$length+$width_corr;        
  $height = $a*12+$height_corr;
}

  
  // make the image
  $image = ImageCreate($width,$height);
  
  // background color
  $bgcolor = ImageColorAllocate($image, 10, 10, 10);  

  // color of the character
  $color = imagecolorallocate($image, 0,255 ,0 );
  
  $hor_1 = $width-($a*6)+$hor_corr;
  $vert  = $height-($height*0.8)+$vert_corr;

  if($empty == 'yes')
{

    ImageString($image, 10, 15, 5, "no input", $color);
}

  elseif ($length > 9)
{

    ImageString($image, 5, 15, 5, "value out ", $color);
    ImageString($image, 5, 15, 20, "of range", $color);
}

  else
{
    $b = $a/2;
    $c = $a*2;
    $d = $a*3;
    $y = 2*$d;
    $z = 3*$a+3;
      
      for($i=0;$i<$length;$i++)
    {
  
        $hor = $hor_1 -($i*7*$a+5);
      
        $segm_1 = array(
                  $a+2+$hor      , $vert,           // Point 1 (x, y)
                  $b+2+$hor      , $b+$vert,        // Point 2 (x, y)
                  $a+2+$hor      , $a+$vert,        // Point 3 (x, y)
                  $a+2+$c+$hor   , $a+$vert,        // Point 4 (x, y)
                  $a+2+$c+$b+$hor, $b+$vert,        // Point 5 (x, y)
                  $a+2+$c+$hor   , $vert,           // Point 6 (x, y)
                  );
        $segm_7 = array(
                  $a+2+$hor      , $d+$vert,        // Point 1 (x, y)
                  $b+2+$hor      , $b+$d+$vert,     // Point 2 (x, y)
                  $a+2+$hor      , $a+$d+$vert,     // Point 3 (x, y)
                  $a+2+$c+$hor   , $a+$d+$vert,     // Point 4 (x, y)
                  $a+2+$c+$b+$hor, $b+$d+$vert,     // Point 5 (x, y)
                  $a+2+$c+$hor   , $d+$vert,        // Point 6 (x, y)
                  );
        $segm_4 = array(
                  $a+2+$hor      , $y+$vert,        // Point 1 (x, y)
                  $b+2+$hor      , $b+$y+$vert,     // Point 2 (x, y)
                  $a+2+$hor      , $a+$y+$vert,     // Point 3 (x, y)
                  $a+2+$c+$hor   , $a+$y+$vert,     // Point 4 (x, y)
                  $a+2+$c+$b+$hor, $b+$y+$vert,     // Point 5 (x, y)
                  $a+2+$c+$hor   , $y+$vert,        // Point 6 (x, y)
                  );

        $segm_2 = array(
                  $b+$hor       , $b+1+$vert,       // Point 1 (x, y)
                  $hor          , $a+1+$vert,       // Point 2 (x, y)
                  $hor          , $d-1+$vert,       // Point 3 (x, y)
                  $b+$hor       , $b-1+$d+$vert,    // Point 4 (x, y)
                  $a+$hor       , $d-1+$vert,       // Point 5 (x, y)
                  $a+$hor       , $a+1+$vert,       // Point 6 (x, y)
                  );
        $segm_3 = array(
                  $b+$hor       , $b+1+$d+$vert,    // Point 1 (x, y)
                  $hor          , $a+1+$d+$vert,    // Point 2 (x, y)
                  $hor          , $d-1+$d+$vert,    // Point 3 (x, y)
                  $b+$hor       , $b-1+$d+$d+$vert, // Point 4 (x, y)
                  $a+$hor       , $d-1+$d+$vert,    // Point 5 (x, y)
                  $a+$hor       , $a+1+$d+$vert,    // Point 6 (x, y)
                  );
        $segm_5 = array(
                  $b+1+$z+$hor  , $b+1+$vert,       // Point 1 (x, y)
                  $z+1+$hor     , $a+1+$vert,       // Point 2 (x, y)
                  $z+1+$hor     , $d-1+$vert,       // Point 3 (x, y)
                  $b+1+$z+$hor  , $b-1+$d+$vert,    // Point 4 (x, y)
                  $a+1+$z+$hor  , $d-1+$vert,       // Point 5 (x, y)
                  $a+1+$z+$hor  , $a+1+$vert,       // Point 6 (x, y)
                  );
        $segm_6 = array(
                  $b+1+$z+$hor  , $b+1+$d+$vert,    // Point 1 (x, y)
                  $z+1+$hor     , $a+1+$d+$vert,    // Point 2 (x, y)
                  $z+1+$hor     , $d-1+$d+$vert,    // Point 3 (x, y)
                  $b+1+$z+$hor  , $b-1+$d+$d+$vert, // Point 4 (x, y)
                  $a+1+$z+$hor  , $d-1+$d+$vert,    // Point 5 (x, y)
                  $a+1+$z+$hor  , $a+1+$d+$vert,    // Point 6 (x, y)
                  );

       $char = substr($value, $length-1-$i ,1);
      
        if($char == '0'|$char == '2'|$char == '3'|$char == '5'|$char == '6'|$char == '7'|$char == '8'|$char == '9')               {imagefilledpolygon($image, $segm_1, 6, $color);}
        if($char == '0'|$char == '4'|$char == '5'|$char == '6'|$char == '8'|$char == '9')                                         {imagefilledpolygon($image, $segm_2, 6, $color);}
        if($char == '0'|$char == '2'|$char == '6'|$char == '8')                                                                   {imagefilledpolygon($image, $segm_3, 6, $color);}
        if($char == '0'|$char == '2'|$char == '3'|$char == '5'|$char == '6'|$char == '8')                                         {imagefilledpolygon($image, $segm_4, 6, $color);}
        if($char == '0'|$char == '1'|$char == '2'|$char == '3'|$char == '4'|$char == '7'|$char == '8'|$char == '9')               {imagefilledpolygon($image, $segm_5, 6, $color);}
        if($char == '0'|$char == '1'|$char == '3'|$char == '4'|$char == '5'|$char == '6'|$char == '7'|$char == '8'|$char == '9')  {imagefilledpolygon($image, $segm_6, 6, $color);}
        if($char == '2'|$char == '3'|$char == '4'|$char == '5'|$char == '6'|$char == '8'|$char == '9')                            {imagefilledpolygon($image, $segm_7, 6, $color);}
    }
}


  header('Content-type: image/png');
  imagepng($image);
  imagedestroy($image);
?>



René.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. cijfers-omzetten-in-7-segmenten

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.