Suche Alternative zu imagecolorat (php)

Alexander11

Cadet 1st Year
Registriert
Apr. 2016
Beiträge
12
Hallo liebes Forum!

Ich bin auf der Suche nach einer Alternative zu imagecolorat, mit der ich Pixelfarben auslesen kann. Imagecolorat benötigt für 10.000 Pixel etwa eine halbe Minute, also würde ein 10.000 Mal 10.000 Pixel Bild 300.000 Sekunden benötigen. Das wären dann ein paar Tage, was zu lang ist.
Ich weiß, dass man in HTML PHP einbinden kann, javescript, Java, um ein paar Beispiele zu nennen.
Die Programmiersprache soll, wie die eben genannten kostenlos sein und möglichst ohne Plugin in den gewöhnlichen Browsern funktionieren. Java benötigt ein Plugin soweit ich das verstanden habe und teilweise wird dieses deaktiviert. Aus Virenschutz wenn das nicht falsch ist. So würde ich java deswegen ungern verwenden. Javascript läuft ohne Plugin soweit ich weiß, darüber habe ich mich noch gar nicht informiert.
Vielleicht gibt es jemanden mit einer breitflächigen Programmiererfahrung, der mir die passende Funktion der passenden Programmiersprache nennen kann.?
Grüße
Vielen Dank,
Alex
 
Hört sich danach an, als wärst du auf dem Holzweg. Was ist denn das eigentliche Ziel?
 
  • Gefällt mir
Reaktionen: gaym0r
Alexander11 schrieb:
Ich weiß, dass man in HTML PHP einbinden kann, javescript, Java, um ein paar Beispiele zu nennen.
Die Programmiersprache soll, wie die eben genannten kostenlos sein und möglichst ohne Plugin in den gewöhnlichen Browsern funktionieren.

Vorsicht: PHP läuft nicht im Browser und du kannst es auch nicht "in HTML einbinden". Wenn du für deine Farberkennung PHP einsetzen willst, dann musst du es auf einem Server laufen lassen und die Bilder dort hochladen. Wenn du die Berechnung wirklich direkt im Browser laufen lassen willst, brauchst du Javascript.
 
  • Gefällt mir
Reaktionen: pcBauer
@up.whatever
Was ist das Ziel?
Farberkennung in höherer Geschwindigkeit als mit PHP.
@NullPointer
Wenn ich "<?PHP Echo 2 + 3 ?>" in "<p></p>"-Tags einbinde, habe ich php in html eingebunden, oder?
Mit Xxamp oder wie man das schreibt, läuft PHP auch offline. Aber das zählt wohl als Server? Normalerweise aber nutzt man den Browser auch online am Server. Im Gegensatz zu Java glaube ich, ohne Plugin.

Kennst du die Colorat Funktion in Javascript oder ob es dort eine gibt? Ich gebe zu, das kann ich auch selber recherchieren.
 
Alexander11 schrieb:
Farberkennung in höherer Geschwindigkeit als mit PHP.
Das erkennen wir. Die Frage war, was du machen willst, nicht wie du es machen willst.

Was: Videos von Usern konvertieren
Wie: x264 verwenden

Du fragst nach dem Wie, wir wollen das Was.

Dein evtl. Was: User laden Bilder hoch und du willst ihnen eine Farbpalette des Bildes zeigen oder die am häufigsten genutzte Farbe
Wie: Farberkennung via XYZ
Alexander11 schrieb:
Wenn ich "<?PHP Echo 2 + 3 ?>" in "<p></p>"-Tags einbinde, habe ich php in html eingebunden, oder?
Nein du hast HTML in PHP eingebunden. HTML wird im Browser interpretiert und da läuft kein PHP, ergo steht dort im Browser <?php echo 2 + 3 ?>, so wie du es auch gerade hier direkt vor dir siehst.
 
Ich habe mal ein Programm geschrieben, welches eine Art Ambilight-Ansteuerung über das DMX / Art-Net Protokoll über das Netzwerk sendet. Das Programm schießt, vereinfacht ausgedrückt, regelmäßig mit 30 Hz, also 30 Mal die Sekunde, einen "Screenshot in den Arbeitsspeicher" (BitBlt), wertet diesen aus, ermittelt einen durchschnittlichen Farbwert des gesamten Bildes, führt eine RGB -> HSV konvertierung durch, passt die Sättigung an, führt Farbwertkorrekturen durch und sendet das Ergebnis über ein UPD-Socket mit dem Art-Net Protokoll an das entsprechende Art-Net Device. Das ganze ist in C++ geschrieben, kompiliert & bereinigt (Debug-Infos raus) am Ende 200 KB klein und braucht während der Laufzeit auf einem Full HD Desktop ca 8 MB Arbeitsspeicher und knapp 1,6 % CPU von einem 3,0 Ghz Intel Pentium G3220.

Edit: Dort kann man sich den Quelltext des Tools auch herunterladen, falls Interesse daran besteht.
 
Zuletzt bearbeitet:
Alexander11 schrieb:
Mit Xxamp oder wie man das schreibt, läuft PHP auch offline. Aber das zählt wohl als Server? Normalerweise aber nutzt man den Browser auch online am Server. Im Gegensatz zu Java glaube ich, ohne Plugin.

Genau, XAMPP ist ein Apache-Webserver kombiniert mit einem PHP-Interpreter (und noch ein paar anderen Dingen). Der entscheidende Unterschied zu Javascript besteht darin, dass dein Browser niemals PHP-Code zu sehen bekommt. Er wird auf dem Server ausgeführt, und nur das, was der Code ausgibt (z.B. HTML) wird übers Netzwerk zu dir geschickt. Wenn du dagegen Javascript in HTML einbindest, dann wird dieses Skript zusammen mit dem HTML an den Browser übertragen und dort erst ausgeführt.
 
@Yuuri
Ich will lernen, ein Tor zu schießen. Also übe ich, Tore zu erzielen.
Macht es einen Unterschied, gegen wen ich spielen werde, und wie hoch ich das Spiel gewinnen will?

Ich will versuchen, Bilder zu verändern. Wie im Bildbearbeitungsprogramm. Wie genau, das ist kein Betriebsgeheimnis aber das geht auch etwa in Richtung Privatsphäre.

Beispielsweise Versuche ich, Flächen einzuteilen, in aus welcher Farbe besteht die größte Fläche. Oder vielleicht sogar, aus welchem Farbton. Dafür brauche ich die Pixel in abnehmbarer Geschwindigkeit und kann dann in PHP weiter vorgehen.

Vielleicht gibt es Funktionen dafür, aber mit einer schnellen Colorat Funktion in welch auch immer Programmiersprache, dürfte es keine Hindernisse geben... Aber vielleicht täusche ich mich auch
Ergänzung ()

@ayngush
Vielen Dank für die Antwort, auf soetwas wollte ich hinaus.
 
Zuletzt bearbeitet:
Du kannst jede Programmiersprache nehmen die du willst. Falls dir PHP nicht performant genug ist, dann nimm halt C++. Musst deinen Server so konfigurieren, dass er die Anfrage/Aufgabe an dein C++ Programm übergibt. Stichwort CGI/FastCGI.
 
So, zu hause.

Das ist der relevante screen capture process meines Tools, der die RGB-Farbwerte der Pixel zählt:

C++:
while(capture)
{
    rgbNow = {};

    // Anfangsadresse des Bitmaps Speichern
    lpbitmap = lpbitmapOrg;

    // Bitmap aufzeichnen und in Arbeitsspeicher laden
    hOldBitmap = (HBITMAP)SelectObject(hMemoryDC, hBitmap);
    BitBlt (hMemoryDC, 0, 0, horizontal, vertical, hScreenDC, 0, 0, SRCCOPY);
    hBitmap = (HBITMAP)SelectObject(hMemoryDC, hOldBitmap);
    GetDIBits (hMemoryDC,hBitmap,0,(UINT)vertical,lpbitmap, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
    GetObject (hBitmap, sizeof(lpbitmap), &lpbitmap);

    // Die Summe aller Pixel des Capture-Bereiches für jeden Farbwert ermitteln
    countPixel = (horizontal * vertical);

    // Jedes Pixel des Capture-Bereiches durchlaufen
    for (int i = 0; i < horizontal; i++)
    {
        for (int j = 0; j < vertical; j++)
        {

            rgbNow.b += lpbitmap[0];
            rgbNow.g += lpbitmap[1];
            rgbNow.r += lpbitmap[2];

            lpbitmap += 4;
        }
    }

    if (rgbNow.r > 0) rgbNow.r = rgbNow.r / countPixel;
    if (rgbNow.g > 0) rgbNow.g = rgbNow.g / countPixel;
    if (rgbNow.b > 0) rgbNow.b = rgbNow.b / countPixel;

    rgbOriginalNow = rgbNow;

    rgbDiff.r = std::max(rgbOriginalLast.r,rgbOriginalNow.r) - std::min(rgbOriginalLast.r,rgbOriginalNow.r);
    rgbDiff.g = std::max(rgbOriginalLast.g,rgbOriginalNow.g) - std::min(rgbOriginalLast.g,rgbOriginalNow.g);
    rgbDiff.b = std::max(rgbOriginalLast.b,rgbOriginalNow.b) - std::min(rgbOriginalLast.b,rgbOriginalNow.b);
}

Eventuell reicht das ja aus, um daraus etwas für dein Vorhaben zu verwenden.
 
Ich glaube der Threadersteller brauch Grundlagen in der Programmierung. Soll diese Anwendung im www laufen? Soll es lokal laufen? Brauch man wirklich jedes pixel? Für Bildverarbeitung gibt es in jeder programmiersprache gute Frameworks. Man brauch das Rad nicht neu erfinden. Wenn du generelle Fragen hast formuliere sie genereller. Bspw ist es ssicherlich nicht nötig bei einem bild mit 32MP alle pixel zu analysieren. Man kann es deutlich kleiner machen und dann bearbeiten. Oder oder oder. Dazu müsste man die Anwendung wissen. Und JavaScript machen auch manche Leute im Browser aus dann funktioniert dein script auch nicht.
 
Natürlich hat der TE ein XY Problem. Wurde hier bereits vermutet, aber er geht drauf nur unzureichend ein.
 
  • Gefällt mir
Reaktionen: up.whatever
Ich bin auf c++ aufmerksam gemacht worden und habe sogar ein Code Beispiel bekommen, das die Anwendung, nach der ich gefragt habe, beinhaltet.
Vielen Dank also, jetzt kann ich mit c++ weiterprogrammieren.
 
Sparta8 schrieb:
Du kannst jede Programmiersprache nehmen die du willst. Falls dir PHP nicht performant genug ist, dann nimm halt C++. Musst deinen Server so konfigurieren, dass er die Anfrage/Aufgabe an dein C++ Programm übergibt. Stichwort CGI/FastCGI.
Java hätte ich nehmen können, aber, um Seiten aufzurufen, die mit Java programmiert sind, braucht man ein Plugin. Der Grund, weshalb ich deswegen von Java absehen wollte ändert nichts daran, dass ich es wollte.
Es ist nicht mir PHP zu performant, sondern der Computer benötigt zu viel Zeit. Was habe ich denn damit zu tun. Nicht immer gleich persönlich werden...
Für C++ braucht man tatsächlich CGI und was das ist und wie und ob das beispielsweise in Javascript geht, versuche ich gerade herauszufinden.
 
Schau dir mal WebAssembly an, wenn dein C++ auf dem Client anstatt auf dem Server ausgeführt werden soll.
Ich verstehe aber immer noch nicht, was jetzt genau das Problem ist: Soll der Server Bilder auswerten und das Ergebnis an einen Client übertragen oder sollen sich Client vom Server etwas Programmcode schnappen und Clientseitig damit Aufgaben erledigen?
 
Alexander11 schrieb:
Java hätte ich nehmen können, aber, um Seiten aufzurufen, die mit Java programmiert sind, braucht man ein Plugin. Der Grund, weshalb ich deswegen von Java absehen wollte ändert nichts daran, dass ich es wollte.
Es ist nicht mir PHP zu performant, sondern der Computer benötigt zu viel Zeit. Was habe ich denn damit zu tun. Nicht immer gleich persönlich werden...
Für C++ braucht man tatsächlich CGI und was das ist und wie und ob das beispielsweise in Javascript geht, versuche ich gerade herauszufinden.
Du kannst auch JAVA nehmen und man braucht kein Plugin. Das geht auch über CGI, genauso wie JEDE andere Programmiersprache.
Ich bin nicht "persönlich" geworden, ich bin nur auf dein Problem eingegangen. Du sagst PHP ist dir zu langsam. Ich sag, dann nimm halt C++.
 
  • Gefällt mir
Reaktionen: abcddcba
Ich antworte auf den Inhalt später.
Vorher noch, zum Thema persönlich werden:
"Entschuldigung, haben Sie vielleicht 40 Cent für mich, damit ich die Fahrkarte für 2,90 bezahlen kann?"
  1. "Hier, bitteschön"
  2. "Bitte fragen Sie jemanden anderen"
  3. "Kannst du dir 40 Cent nicht leisten? Ich hab ein paar tausend euro auf dem Konto und du hast nicht mal 40 Cent? Was stimmt denn mit dir nicht? Kommst du aus einem Flüchtlingsland? Haben deine Eltern nicht richtig gearbeitet oder?"
 
Zurück
Oben