Pete: Mit php jpg oder png untersuchen möglich?

Hallo,

kann man mit php (GD, Imagick) oder überhaupt mit Webtechniken ein Image auf Pixelfarben an bestimmten Stellen untersuchen oder ist das illusorisch?

Pete

  1. Hallo Pete,

    kann man mit php (GD, Imagick) oder überhaupt mit Webtechniken ein Image auf Pixelfarben an bestimmten Stellen untersuchen oder ist das illusorisch?

    das ist gar kein Hexenwerk. Lade das Bild mit imagecreatefromjpeg() oder imagecreatefrompng(), und bestimme dann die Farbe des gesuchten Pixels mit imagecolorat().

    Den Typ der Grafikressource (JPEG, PNG, GIF, whatever) kannst du vorher mit getimagesize() abfragen.

    Möge der Kaffee gut und der Montag kurz sein
     Martin

    --
    The taste of love: The more you get, the more you want
    (aus The Lightning Seeds: Sense)
    1. Hallo Martin,

      das ist gar kein Hexenwerk. Lade das Bild mit imagecreatefromjpeg() oder imagecreatefrompng(), und bestimme dann die Farbe des gesuchten Pixels mit imagecolorat().

      Das klappt soweit sehr gut, danke für den Tip.

      Das nächste Problem ist, dass ich durch das "Antialiasieren" innerhalb der JPGs immer so ungefähr dieselben Farben habe, nie aber ganz genau dieselben Farben. Im Grunde muß nur zwischen rot und grün unterschieden werden, aber ich finde grad keinen Anhaltspunkt, wie ich ganz sicher unterscheiden kann, ob es ein Rotton oder Grünton ist.

      Hast Du da auch eine Idee?

      Pete

      1. Hi,

        und bestimme dann die Farbe des gesuchten Pixels mit imagecolorat().

        Das klappt soweit sehr gut, danke für den Tip.

        Das nächste Problem ist, dass ich durch das "Antialiasieren" innerhalb der JPGs immer so ungefähr dieselben Farben habe, nie aber ganz genau dieselben Farben. Im Grunde muß nur zwischen rot und grün unterschieden werden, aber ich finde grad keinen Anhaltspunkt, wie ich ganz sicher unterscheiden kann, ob es ein Rotton oder Grünton ist.

        Wenn der R-Anteil höher als der G-Anteil ist, und ggf. noch beide höher als der B-Anteil?

        cu,
        Andreas a/k/a MudGuard

        1. Hi,

          Wenn der R-Anteil höher als der G-Anteil ist, und ggf. noch beide höher als der B-Anteil?

          Na das scheint mir so nicht ganz zu passen, weil dieses Antialiassing wirklich schräge Farbtöne hervorbrimngt. Aber so in etwas gehts dann doch. Man kann die 3 Farbbereiche zahlenmäßig so eingrenzen, dass man sich relativ sicher sein kann, ein gutes Ergebnis zu erzielen.

          Pete

          1. Hallo,

            Wenn der R-Anteil höher als der G-Anteil ist, und ggf. noch beide höher als der B-Anteil?

            Na das scheint mir so nicht ganz zu passen, weil dieses Antialiassing wirklich schräge Farbtöne hervorbrimngt.

            ich würde vielleicht auch versuchen, nicht nur ein Pixel zu bewerten, sondern den Mittelwert des gesuchten Pixels und seiner 8 Nachbarn (Randbereiche ausgenommen) - eventuell mit doppelter Gewichtung des Zentralpixels.

            Möge der Kaffee gut und der Montag kurz sein
             Martin

            --
            The taste of love: The more you get, the more you want
            (aus The Lightning Seeds: Sense)
            1. Hi Martin,

              ich würde vielleicht auch versuchen, nicht nur ein Pixel zu bewerten, sondern den Mittelwert des gesuchten Pixels und seiner 8 Nachbarn (Randbereiche ausgenommen) - eventuell mit doppelter Gewichtung des Zentralpixels.

              Ja, genau das macht man auch, wenn man die Farbwertgrenzen setzt.

              Ich fahr jetzt gerade mit

              if($red > 160 && $green < 50) {
                 $rot++;
              } elseif($red < 150 && $green > 120) {
                 $gruen++;
                 ...
              

              Das passt bisher ganz gut.

              Das Problem ist ja, dass das eigentlich bereits komprimierte jpg nochmals komprimiert abgelegt wird, sodass der antialisierte farbbereich wirkliche Stilblüten hervorbringt.

              Dennoch:

              Ich bin total dankbar für Deine geniale Idee, wie man das mittels Webtechnik lösen kann und es funktioniert bisher einwandfrei. 👍

              Pete

        2. @@MudGuard

          Im Grunde muß nur zwischen rot und grün unterschieden werden, aber ich finde grad keinen Anhaltspunkt, wie ich ganz sicher unterscheiden kann, ob es ein Rotton oder Grünton ist.

          Wenn der R-Anteil höher als der G-Anteil ist, und ggf. noch beide höher als der B-Anteil?

          Oder gar nicht weiter mit RGB rumhantieren, sondern in HSL o.ä. umrechnen? Dann muss man nur noch den Farbwert H betrachten (evtl. erst ab einem gewissen Mindestwert für die Sättigung S).

          😷 LLAP

          --
          „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
          — Joachim Gauck über Impfgegner
      2. Hi there,

        Das nächste Problem ist, dass ich durch das "Antialiasieren" innerhalb der JPGs immer so ungefähr dieselben Farben habe, nie aber ganz genau dieselben Farben. Im Grunde muß nur zwischen rot und grün unterschieden werden, aber ich finde grad keinen Anhaltspunkt, wie ich ganz sicher unterscheiden kann, ob es ein Rotton oder Grünton ist.

        Die Frage ist, was für eine Art von Bild Du da untersuchst und wie weit Du da Einfluß auf den Dateityp hast. Bei Photos und besonders bei Jpegs hast Du natürlich immer das Problem der farblichen Randschärfe. Bei Graphiken als Gif oder PNG kann man dieses Problem leichter umgehen. Vielleicht hilft es ja schon, wenn Du das Bild vorher in ein solches Format konvertieren kannst und dabei den Kontrast erhöhst.

        Wenn das alles nicht möglich ist, dann ist vermutlich der von MudGuard vorgeschlagene Weg der sinnvollste...(edit: wobei es bei einem Jpeg vermutlich auch auf die Stärke der Kompression ankommt, ob das überhaupt funktioniert. Durch die Kompressions-Artfakte können schon mal die lustigsten Farben auftauchen)