Forum: PC-Programmierung CGI - Grafik erzeugen


von LinuX007 (Gast)


Lesenswert?

Hallo ihr Lieben!


Ich habe vor, Drehzahldaten eines Drehzahlmessers via CGI im Internet zu 
veröffentlichen. Das heißt, ich übergebe über den Parameter Daten an 
meinen Webserver.
Da ich die Drehzahldaten auf dem Webserver grafisch darstellen will (in 
Form eines Drehzahlmessers eines Autos) tut sich folgende Frage auf:

Wie kann ich mit HTML ein Bild abhängig von übergebenen Parametern 
"animieren". Einfach mehrere Bilder nehmen, die je nach Ereignis (je 
nach Drehzahl/min) veröffentlicht wird?

Es sollte schon etwas professioneller aussehen und nicht wie eine 0-8-15 
HTML-Seite ;)

Falls ich etwas finde, was meinen Vorstellungen entspricht, poste ich es 
hier.


Vielen Dank!

von Nico E. (masta79)


Lesenswert?

Hmmm, ich würde das vlt. nicht als Grafik machen, sondern via 
javascript, da gibts im netz ein paar nette beispiele für Uhren. Die 
Daten holst du dir dann via AJAX von einem Server.

von Simon K. (simon) Benutzerseite


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sofern es nicht mit jedem auch steinalten Browser funktionieren muss, 
könntest Du Dir mal SVG ansehen. Dazu solltest Du eine Technik anwenden, 
die geänderte Daten (in Deinem Fall also wohl die Drehzahl) ohne 
Neuladen der Seite zu aktualisieren - das Stichwort hierfür lautet Ajax.

Das allerdings setzt eine clientseitige Skriptsprache voraus, hier 
bietet sich Javascript an, denn das unterstützt so gut wie jeder 
Browser.

von LinuX007 (Gast)


Lesenswert?

Nun ich weiß jetzt nicht genau was Ajax ist. Die Daten zum Server 
übermitteln, erfolgt aber trotz Verwendung von Ajax via CGI oder?

von LinuX007 (Gast)


Lesenswert?

Das SVG liest sich gut, das heißt ,ich könnte mit einem 
SVG-Unterstützenden Programm eine Grafik erstellen, die wird dann von 
dem SVG-unterstützendem Programm in einen Quelltext (XML).

Per CGI (Programmiersprache C) wird eine Hystere erzeugt, in der geprüft 
wird, in welcher Größe die Parameter an den Server übergeben werden. 
Sprich, ist Drehzahl zwischen 0-100, dann zeige SVG-Skript1, ist 
drehzahl höher, dann zeige SVG-Skript2 usw usw. Das heißt, ich müsste 
das SVG-Skript in CGI integrieren?!


Danke!

von Nico E. (masta79)


Lesenswert?

LinuX007 wrote:
> Nun ich weiß jetzt nicht genau was Ajax ist. Die Daten zum Server
> übermitteln, erfolgt aber trotz Verwendung von Ajax via CGI oder?

Nicht zwingend, du kannst auch einfach periodisch eine Datei ablegen die 
die Daten vorhält.

AJAX ist einfach nur ein Modebegriff, das ganze basiert darauf das im 
"Hintergrund" ein Javascript immer wieder Daten läd (in deinem Fall 
einfach nur die Datei) und die Seite entsprechend anpasst.

von Nico E. (masta79)


Lesenswert?

LinuX007 wrote:

> Per CGI (Programmiersprache C) wird eine Hystere erzeugt, in der geprüft
> wird, in welcher Größe die Parameter an den Server übergeben werden.
> Sprich, ist Drehzahl zwischen 0-100, dann zeige SVG-Skript1, ist
> drehzahl höher, dann zeige SVG-Skript2 usw usw. Das heißt, ich müsste
> das SVG-Skript in CGI integrieren?!

SVG ist ein vektor grafikformat welches auf XML basiert. Mit Javascript 
kannst du das XML/SVG im browser zur laufzeit modifizieren.

von LinuX007 (Gast)


Lesenswert?

ja aber ich muss doch dem Skript dann irgendwie die Parameter zur 
Veränderung übergeben?!

von LinuX007 (Gast)


Lesenswert?

Das kann eigentlich nur mit CGI funktionieren, ohne ständig neue 
Java-Skripte auf den webserver hochladen zu müssen?!

von Nico E. (masta79)


Lesenswert?

Atme erstmal tief durch, denk ein wenig nach und frag dann google. ;) 
mit den Stichworten die bisher gefallen sind solltest du da was finden.

von LinuX007 (Gast)


Lesenswert?

ok :)

ich habe jetzt mal nach SVG gesucht. Das ist ja dann ein statisches 
Skript, in dem einfach Daten für eine Grafik drinstehen.
Das heißt, ich müsste dann per CGI im C-Quellcode die Daten für die 
Grafik erzeugen und je nach Ereignis dem Web "veröffentlichen". Das 
erscheint mir soweit plausibel, zudem die Grafiken richtig gut aussehen 
(habe mal gegoogelt).
Ich lade mir gerade erstmal Gimp, das soll SVG unterstützen und dann 
probier ich mal was aus.

Danke!

von Simon K. (simon) Benutzerseite


Lesenswert?

http://de.wikipedia.org/wiki/Scalable_Vector_Graphics#SVG-Unterst.C3.BCtzung_in_Browsern

Unter IE6/IE7 geht es sowieso nur mit Plugin, das ist dir schon bewusst?

von LinuX007 (Gast)


Lesenswert?

hm hab ich wohl überlesen :( das ist nicht gut, obwohl ich keinen IE 
nutze...

Ich werde es einfach per Bilder machen. Bilder, die sich je ereignis 
einblenden.



Danke!

von Johnny (Gast)


Lesenswert?

Eine Idee wäre noch, das mit einem normalen (z.B. PHP) Script und der 
meist schon auf dem Webserver installierten GD Library machen. Du 
könntest den Hintergrund der Drehzahlmessers schön in einem 
Bildverarbeitungsprogramm gestalten und auf dem Webserver ablegen. Per 
GD Library kannst du dann in PHP noch den Zeiger in den Drehzahlmesser 
reinzeichnen.
Das ganze würde sich mit nur wenigen Zeilen Code realisieren lassen.

von Johnny (Gast)


Lesenswert?

Da hab ich übrigens mal was ähnliches realisiert:
http://www.fritigsclub.ch/Bierdeckel_Creator/E99_Bierdeckel_Creator.php

von Simon K. (simon) Benutzerseite


Lesenswert?

Johnny wrote:
> Da hab ich übrigens mal was ähnliches realisiert:
> http://www.fritigsclub.ch/Bierdeckel_Creator/E99_Bierdeckel_Creator.php

Oh Gott! Das sind die Sachen im Internet, die die Welt nicht braucht. 
Sorry ;)

Trotzdem ist die Idee mit GD/ImageMagick und PHP nicht all zu schlecht 
;)

LinuX007 wrote:
> Es sollte schon etwas professioneller aussehen und nicht wie eine 0-8-15
> HTML-Seite ;)

Tja, dafür bist du selber verantwortlich und nicht irgendein CGI Script 
;)

von Johnny (Gast)


Lesenswert?

Wieso sagst Du das braucht die Welt nicht?
Jetzt hat er doch gerade von meinem Knoff Hoff profitieren können.
Und schau Dir mal die grafischen Codes im Internet an für den 
"Menschlichkeitstest", die sind alle auch genau so gemacht. Also lass 
Deine verachtenden Beleidigungen und mach erst mal was besseres.

von Simon K. (simon) Benutzerseite


Lesenswert?

Johnny wrote:
> Wieso sagst Du das braucht die Welt nicht?
> Jetzt hat er doch gerade von meinem Knoff Hoff profitieren können.
Wenn du das PHP Script zum Download bereitstellen würdest, könnte er das 
tatsächlich sogar!

> Und schau Dir mal die grafischen Codes im Internet an für den
> "Menschlichkeitstest", die sind alle auch genau so gemacht.
Jau, die braucht die Welt ja auch nicht ;)

> Also lass
> Deine verachtenden Beleidigungen und mach erst mal was besseres.
Ich soll was besseres machen.
Jaja, ich sag ja nicht dass du das schlecht gemacht hast. Übung hat es 
dir sicher gebracht.
Wie auch immer, war nicht all zu ernst gemeint, wobei aber das Internet 
durchaus mit solchen Seiten mal abspecken könnte *HUST.

von Johnny (Gast)


Lesenswert?

Zeig mir was Du besseres geleistet hast als das oder halt die Fresse.

von Simon K. (simon) Benutzerseite


Lesenswert?

Johnny wrote:
> Zeig mir was Du besseres geleistet hast als das oder halt die Fresse.
Also so bestimmt nicht. Ist er nicht süß!? ;)

Nichts gegen dich oder deine Arbeit, aber sowas ist mit Sicherheit kein 
Problem für einen fortgeschrittenen PHP-Programmierer.
Im Prinzip die PHP Basics: Formulardaten entgegennehmen/auswerten und 
ein bisschen mit den GD-Funktionen arbeiten. Dann noch als Grafikstream 
ausgeben (inkl. korrektem Header) und fertig ist die Kiste.

Aber im Prinzip ist es genau das, was er braucht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nur bedeutet der von Simon erwähnte Ansatz, daß der Browser zyklisch die 
Seite (oder mindestens einen iframe) komplett neu laden muss, damit eine 
"dynamische" Wertedarstellung erreicht werden kann.

Das geht mit "Ajax" anders, hier läuft auf dem Client, also /im 
Browser/ ein Script, das per XMLHttpRequest zyklisch Daten vom Browser 
abholt und diese in der bereits geladenen Seite aktualisiert. Das 
bedeutet einerseits, daß weniger Daten übertragen werden müssen, und 
andererseits, daß die Aktualisierungen ohne Geflacker vonstatten gehen.

Anders, als der Name suggeriert, muss hier auch gar kein XML verwendet 
werden; die Art und Weise, auf die die übertragenen Nutzdaten verpackt 
werden, ist völlig irrelevant, nur muss das clientseitige Script in der 
Lage sein, die Daten zu verdauen.

von LinuX007 (Gast)


Lesenswert?

oh je oh je ^^


Ich merke schon, mein Thread sorgt für (soziale) Aufregung, mehr, als 
das Thema selbst.

Jetzt nochmal sachlich:

 - Ich werde es vorerst so machen: ich habe mehrere Bilder, die 
nacheinander über den Webserver veröffentlicht werden.

 - Wenn das funktioniert, werde ich es mit SVGs machen. Im CGI-Skript 
muss dann das SVG-Skript stehen, das je nach Ereignis "verändert" wird 
und somit eine andere Grafik in Echtzeit beim Client "erzeugt".


Nun habe ich aber noch folgendes Problem auf meinem Apache-Webserver, 
vielleciht kann mir hierzu jemand eine Antwort geben:

Ich habe nun in eine Datei namens "teste_skript.c", die in einem von mir 
erstellten Ordner "cgi-bin" auf meinem Webserver liegt versucht, diese 
Datei mit dem Befehl "gcc -o 
/var/www/apache2-default/cgi-bin/teste_skript.c 
/var/www/apache2-default/cgi-bin/teste_skript.cgi" zu kompilieren.

Dann kommt folgender Fehler: "gcc: No such file or directory", "gcc: no 
input files".

Hier der Code des "teste_skript.c" (es ist ein Codebeispiel des Buches 
"C von A-Z" von Gailieocomputing):
1
#include <stdio.h>
2
#include <stdlib.h>
3
/* Die Kopfzeile eines Standard-HTML-Dokuments
4
 * titel: String, der als Titel erscheinen soll
5
 */
6
void print_html_header(char *titel) {
7
   printf("<html><head>\n");
8
   printf("<title>%s</title>\n",titel);
9
   printf("</head><body><pre>\n");
10
}
11
/* Das Ende eines HTML-Dokuments */
12
void print_html_end(void) {
13
   printf("</pre></body></html>\n");
14
}
15
/* Damit überhaupt ein HTML-Dokument ausgegeben wird */
16
void print_header(void) {
17
   printf("Content-Type: text/html\n\n");
18
}
19
int main(void) {
20
   char *p;
21
   print_header();
22
   print_html_header("Wer bin ich?");
23
   p = getenv("HTTP_USER_AGENT");
24
   if(p!=NULL)
25
      printf("Sie browsen mit : %s\n",p);
26
   else
27
      printf("Konnte HTTP_USER_AGENT nicht ermitteln!\n");
28
   print_html_end();
29
   return EXIT_SUCCESS;
30
}

Woran kann das liegen?

Danke!

von Hase (Gast)


Lesenswert?

> Ich habe nun in eine Datei namens "teste_skript.c", die in einem von mir
> erstellten Ordner "cgi-bin" auf meinem Webserver liegt versucht, diese
> Datei mit dem Befehl "gcc -o
> /var/www/apache2-default/cgi-bin/teste_skript.c
> /var/www/apache2-default/cgi-bin/teste_skript.cgi" zu kompilieren.
> Dann kommt folgender Fehler: "gcc: No such file or directory", "gcc: no
> input files".
> Woran kann das liegen?

Weil der Syntax lautet: gcc -o OUTPUTFILE inputfile (s. man gcc)
d.h. er versucht "teste_skript.cgi" zu kompilieren, was aber noch nicht 
existiert... Vertausch mal beides.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.