cijfers omzetten in 7 segmenten
Door Ren , 19 jaar geleden, 4.746x 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
Er zijn 9 reacties op 'Cijfers omzetten in 7 segmenten'
Gesponsorde koppelingen
Gaaf resultaat!
Nog wel een tip:
Kan vervangen worden door:
Nog wel een tip:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
}
?>
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:
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...
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...
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 ;-)
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 ;-)
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é.
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é.
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
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é
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)
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é
Ik heb het script weten te halveren. Al doende leert men.
René.
Code (php)
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
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);
?>
$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
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu