Digitale + Analoge datum/klok in afbeelding

Door Daan Onbekend, 13 jaar geleden, 7.535x bekeken

Dit is mijn eerste script dat ik publiceer, ik heb geprobeerd alles er zo duidelijk mogelijk bij te zetten.

Het gaat hier voornamelijk om de analoge klok, eventueel kun je je eigen achtergrondafbeelding zo aanpassen dat er ook cijfers op de wijzerplaat staan.

Opbouwende kritiek is altijd welkom.

Voorbeeld: http://leds24.nl/klok.php

Gesponsorde koppelingen

PHP script bestanden

  1. digitale-analoge-datumklok-in-afbeelding

 

Er zijn 20 reacties op 'Digitale analoge datumklok in afbeelding'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jesper Diovo
Jesper Diovo
13 jaar geleden
 
0 +1 -0 -1
Leuk, maar waar zit de klok ergens? *blind*

Quote:
1.666666666666666666
Om het efficiënter te doen, zou ik het zo doen: (1+(2/3)). Dat geeft namelijk 1.6666666666666666666666666666667 (eigenlijk oneindig), en dus betrouwbaarder dan 1.666666666666666666. Zelfde geldt voor die 8.333333: (8+(1/3)).
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
Het kan zijn dat de achtergrondafbeelding die je gebruikt te klein is waardoor hij er niet op staat, verder zal ik het even veranderen in 2/3
Jesper Diovo
Jesper Diovo
13 jaar geleden
 
0 +1 -0 -1
Oooh wacht, daar zit de klok. Ja, maar klopt dat altijd?

Overigens zie ik nog wat " te veel bij variabelen en wat ' te weinig bij array keys.
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
Wat bedoel je daarmee,

" is toch juist handig omdat je daar direct variabelen in kunt verwerken? Dat werkt alleen niet altijd, omdat als je bijvoorbeeld stukken html wil echoën, dan kan daar ook een " inzitten en dan sluit hij af zonder dat je dat wilt.
Bas Kreleger
Bas Kreleger
13 jaar geleden
 
0 +1 -0 -1
In principe horen variabelen buiten quotes;

Dus niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $text2= "$H:$i"; ?>


Maar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $text2 = $H . ':' . $i; ?>
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
Wat is het voordeel dan van de laatste manier?
De eerste werkt toch ook?
Emmanuel Delay
Emmanuel Delay
13 jaar geleden
 
0 +1 -0 -1
@ Jezpur

Ik zeg niet dat je ongelijk hebt, absoluut niet. Maar denk er toch even bij dat een pc binair rekent. Een pc heeft op een andere manier last van afrondingen dan wij (die decimaal rekenen).

Wat er in decimale notatie eenvoudig uit ziet, kan in binair vrij complex zijn.
bekijk bv. de getallen 0.3 en 0,0625. In binaire notatie is 0,0625 een veel simpeler getal dan 0,3 , omdat het een deling is door een macht van 2. 0,3 is een deling door 10, dat is in binair veel lastiger.

Een float is sowieso een afronding.
Steen
steen
13 jaar geleden
 
0 +1 -0 -1
Waarom gebruik je dan alleen PHP? Je zou elke minuut moeten refreshen, anders krijg je de verkeerde tijd.
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
Een refresh kun je makkelijk zelf inbouwen, ik heb dat bewust weggelaten om niet onnodig veel dataverkeer op mijn server te genereren.
Stel dat ik hem elke minuut zou verversen.
een plaatje is 90 kb, dit betekend dat je na 11 minuten 1 mb gedownload hebt. En als iemand hem dan zou gaan gebruiken, dan ben ik zo door mijn limiet heen.
Ericbruggema x
ericbruggema x
13 jaar geleden
 
0 +1 -0 -1
ook handig is om gewoon de array op te zetten op deze manier

$arr = array('maandag', 'dinsdag', 'woensdag', etc)

is in princiepe precies het zelfde als wat jij doet maar dan wat netter ;)
Thumb nail
Thumb nail
13 jaar geleden
 
0 +1 -0 -1
bij mij werkt hij niet ????
(gebruik fx) en hij zegt dat er fouten in de afbeelding zitten,
tenminste... op mijn eigen host (Windows) en ook op Linux doet hij het niet...
terwijl het voorbeeld wel werkt ????
Jesper Diovo
Jesper Diovo
13 jaar geleden
 
0 +1 -0 -1
Quote:
Wat is het voordeel dan van de laatste manier?
De eerste werkt toch ook?

Ja, maar is niet netjes en niet overzichtelijk.

Quote:
Ik zeg niet dat je ongelijk hebt, absoluut niet. Maar denk er toch even bij dat een pc binair rekent. Een pc heeft op een andere manier last van afrondingen dan wij (die decimaal rekenen).

Wat er in decimale notatie eenvoudig uit ziet, kan in binair vrij complex zijn.
bekijk bv. de getallen 0.3 en 0,0625. In binaire notatie is 0,0625 een veel simpeler getal dan 0,3 , omdat het een deling is door een macht van 2. 0,3 is een deling door 10, dat is in binair veel lastiger.

Een float is sowieso een afronding.

Kan wel zo zijn, maar voor de berekening zelf lijkt mij dat 1.6666667 (onafgerond, dus oneindig) meer zegt dan 1.666666. Als je op je rekenmachine iets * 1.666666 intikt, krijg je een ander antwoord dan wanneer je iets * (5/3) intikt.
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
@Jezpur,

Het ging mij niet om de breuken, maar om het gebruik van " en '.
Ik zit nu ook het voordeel van het gebruik van hele breuken in.

@Johnny

Zou je de foutmelding hier kunnen plaatsen, dan kan ik kijken wat het kan zijn.
Ben je niet vergeten het lettertype in dezelfde map te zetten? of is image GD niet op je computer geïnstalleerd?
Jesper Diovo
Jesper Diovo
13 jaar geleden
 
0 +1 -0 -1
@Daan: weet ik. Die tweede quote was van Emmanuel Delay ;-). Alleen die eerste gold voor jou, en die ging inderdaad over " en '.
Roel -
Roel -
13 jaar geleden
 
0 +1 -0 -1
Kan het ook met secondes?
Thumb nail
Thumb nail
13 jaar geleden
 
0 +1 -0 -1
@Daan
ik heb het ook op een (betaalde) host geprobeerd,
en een foutmelding geeft hij niet in Fx (alleen dat het een verkeerde afbeelding is)
en in IE blijft hij oneindig laden... -.-"
ik heb het font in dezelfde map gezet idd

EIDT: IE is stuk op mijn pc (erger dan normaal)
dus heb nu ff
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<br />
<b>Notice</b>:  Use of undefined constant wday - assumed 'wday' in <b>C:\Documents and Settings\***\Mijn documenten\UsbWebserver\Root\avatar\index.php</b> on line <b>75</b><br />
<br />
<b>Notice</b>:  Use of undefined constant mon - assumed 'mon' in <b>C:\Documents and Settings\***\Mijn documenten\UsbWebserver\Root\avatar\index.php</b> on line <b>76</b><br />
<br />
<b>Warning</b>:  Wrong parameter count for imagefilledrectangle() in <b>C:\Documents and Settings\***\Mijn documenten\UsbWebserver\Root\avatar\index.php</b> on line <b>85</b><br />
<br />
<b>Notice</b>:  Use of undefined constant H - assumed 'H' in <b>C:\Documents and Settings\***\Mijn documenten\UsbWebserver\Root\avatar\index.php</b> on line <b>89</b><br />
<br />
Daan Onbekend
Daan Onbekend
13 jaar geleden
 
0 +1 -0 -1
@ Johnny

Op jouw server werkt het blijkbaar niet om de weekdag d.m.v. wday uit getdate() op te halen. Dan zou je hier bijvoorbeeld date(N) en date(m) voor moeten gebruiken.

imagefilledrectangle() kun je weghalen, ik weet niet waarom die er bij staat, zonder werkt hij ook. Die stond er nog bij omdat ik een ander script gebruikt heb.

Waarom $H niet gedefinieerd is, zou ik echt niet weten. Die wordt op exact dezelfde manier als $i benoemd. En daar komt geen foutmelding uit.

Welke versie van PHP gebruik je?

@Roel

Ja dat kan, dan moet je het volgende erbij zetten:

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
<?
// Seconden ophalen
$s= date(s);

// Wijzertekst invullen
$text5 = "_ _ _ _";

// secondewijzer berekenen
$graden3 = $s * (5/3) * 0.01 * 360 - 90;
$graden3 = $graden3 - $graden3 - $graden3;

// secondewijzer invoegen
imagettftext($im, 20, $graden3, 500, 300, $white, $font, $text5);

?>
Thumb nail
Thumb nail
13 jaar geleden
 
0 +1 -0 -1
ik gebruik de nieuwste php,
ik heb nu dus dit script (alleen wijzers)
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
<?php
// Zorgen dat de browser hem als afbeelding leest
header('Content-type: image/png');

// Achtergrondafbeelding kiezen
$im = @imagecreatefromjpeg('background.jpg');

// Kleuren toewijzen
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);

// Teksten toewijzen
$s= date(s);
$H= date(H);
$i= date(i);
$secondenwijzer = "_ _ _ _";
$minutenwijzer = "...........";
$urenwijzer = "......";

// secondenwijzer berekenen
$graden3 = $s * (5/3) * 0.01 * 360 - 90;
$graden3 = $graden3 - $graden3 - $graden3;

// minutenwijzer (gradenhoek berekenen)
$graden = $i * (5/3) * 0.01 * 360 - 90;
$graden = $graden - $graden - $graden;

// urenwijzer (gradenhoek berekenen)
$graden2 = $H * (25/3) * 0.01 * 360 - 90;
$graden2 = $graden2 - $graden2 - $graden2;
// Urenwijzer ook minuutgevoelig maken.
$aanpassing = $graden / 12;
$graden2 = $graden2 + $aanpassing;

// Lettertype (moet in dezelfde map staan, anders werkt het niet)
$font = 'arial.ttf';

// Wijzers en teksten tekenen
imagettftext($im, 20, $graden, 500, 300, $white, $font, $urenwijzer);
imagettftext($im, 20, $graden2, 500, 300, $white, $font, $minutenwijzer);
imagettftext($im, 20, $graden3, 500, 300, $white, $font, $secondenwijzer);

// Het aanmaken en verwijderen van de afbeelding
imagepng($im);
imagedestroy($im);
?>


maar dan zegt hij dat hij het font niet gan vinden
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Warning: imagettftext() [function.imagettftext]: Could not find/open font in /storage/mijndomein/users/***/public/sites/***/avatar/index.php on line 40

Warning: imagettftext() [function.imagettftext]: Could not find/open font in /storage/mijndomein/users/***/public/sites/***/avatar/index.php on line 41

Warning: imagettftext() [function.imagettftext]: Could not find/open font in /storage/mijndomein/users/***/public/sites/***/avatar/index.php on line 42

terwijl hij wel in de map staat -.-"


overigens, imagefilledrectangle($im, 0, 0, 399, 29);
doet het niet omdat er geen kleur gedefineerd staat ;)
Thijs X
Thijs X
13 jaar geleden
 
0 +1 -0 -1
Leuk scriptje
Voorbeeldje hoe het een stuk beter en korter kan:

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
<?php
// Zorgen dat de browser hem als afbeelding leest
header('Content-type: image/png');

// Nederlandse datum berekenen

// Achtergrondafbeelding kiezen

$im = imagecreatefromjpeg('background.jpg');

// Kleuren toewijzen
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);

setlocale(LC_ALL, 'nld_nld');

// Teksten toewijzen
$text = strftime('%A %d %B, %Y',time());
$text2 = strftime('%H:%M',time());
$sWijzer = "...........";
$sWijzer2 = "......";

// minutenwijzer (gradenhoek berekenen)
$graden = date('i') * (5/3) * 0.01 * 360 - 90;
$graden = $graden - $graden - $graden;

// urenwijzer (gradenhoek berekenen)
$graden2 = date('H') * (25/3) * 0.01 * 360 - 90;
$graden2 = $graden2 - $graden2 - $graden2;
// Urenwijzer ook minuutgevoelig maken.
$aanpassing = $graden / 12;
$graden2 = $graden2 + $aanpassing;

// Lettertype (moet in dezelfde map staan, anders werkt het niet)
$font = 'arial.ttf';

// Wijzers en teksten tekenen
imagettftext($im, 20, -45, 10, 20, $white, $font, $text);
imagettftext($im, 20, 45, 200, 350, $white, $font, $text2);
imagettftext($im, 20, $graden, 500, 300, $white, $font, $sWijzer);
imagettftext($im, 20, $graden2, 500, 300, $white, $font, $sWijzer2);

// Het aanmaken en verwijderen van de afbeelding
imagepng($im);
imagedestroy($im);
?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Thumb nail
Thumb nail
13 jaar geleden
 
0 +1 -0 -1
niet bij iedereen werkt setlocale(LC_ALL, 'nld_nld');
(goed)
ivm het systeem dat draait op de server (lokaal meestal wel ;P)

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

Inhoudsopgave

  1. digitale-analoge-datumklok-in-afbeelding

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.