Farbe bildpunkte in transparenter Grafik

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Farbe bildpunkte in transparenter Grafik

    hi ihr,

    bin neu hier und hoffe auch gleich mal eine frage stellen zu dürfen ?

    Gibt es die möglichkeit jegliche farbigen Bildpunkte innerhalb einer transparenten Grafik zu bestimmten ?

    Egal in welcher Einheit, also z.B Pixelanzahl oder Prozentangabe ?

    oder hat jemand eventuell eine Idee wie ich sowas releasieren könnte?

    Gruss
    Rene

  • #2
    Hallo Rene,

    dazu muss man das Bild zeilenweise abtasten und mit imagecolorat die Pixelfarbe bzw. den Paletteneintrag ermitteln.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo Amica,

      dieser Vorschlag liest sich ja schon mal total klasse.
      Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste, aber da wird mir ja google vielleicht behiflich sein können.

      imagecolorat hab ich mir aber sofort durchgelesen und das arbeitet ja genau wie gewünscht, tastet pixel ab und nennt mir den farbwert.
      also probiert ich erst mal aus, was mir imagecolorat für ein wert ausgibt, wenn er auf ein transparentes pixel trifft... hoffentlich nicht den wert für weiss, denn das gehört mit zu den farbigen pixel.

      Aber wenns gut funktioniert könnte ich alle transparenten pixel zählen und zu der anzahl aller pixel im bild ins Verhältnis setzen und erhalte dann ein prozentwert... oh wäre das super.

      Danke schonmal für diesen anschubser !

      Kommentar


      • #4
        Zitat von someRookie Beitrag anzeigen
        Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste
        Mit einer Schleife für y und darin einer weiteren Schleife für x.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von someRookie Beitrag anzeigen
          Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste, aber da wird mir ja google vielleicht behiflich sein können.
          Jaja, heutzutage geht ohne Google anscheinend nichts mehr ...

          Aber wenns gut funktioniert könnte ich alle transparenten pixel zählen ...
          PHP-Code:
          $w ImageSX($img);
          $h ImageSY($img);
          for (
          $y 0$y $h; ++$y) {
            for (
          $x 0$x $w; ++$x) {
              
          //nur fuer TrueColour-Images!
              
          $argb imageColorAt($img$x$y); // true-colour RGB + alpha
              
          $rgb 0xffffff $argb// true-colour RGB
              
          $alpha = (0xff000000 $argb) >> 24;
              
          $alpha = ($alpha <= 127) ? $alpha 0;
              
          // alle Pixel mit $alpha !== 0 sind transparent

              // ...
              // zählen
              // ...
            
          }

          Wie du siehst, geht das ganz einfach. Leider ist diese Methode auch nicht gerade besonders schnell.

          Der Rest ist Prozentrechnung ...
          Zuletzt geändert von fireweasel; 02.10.2009, 13:22.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            Zitat von AmicaNoctis Beitrag anzeigen
            Mit einer Schleife für y und darin einer weiteren Schleife für x.

            auweia ja !

            Dankeschön !

            Kommentar


            • #7
              Zitat von fireweasel Beitrag anzeigen
              Code:
                  $argb = [B][COLOR="Red"]$[/COLOR][/B]imageColorAt($img, $x, $y); // true-colour RGB + alpha
              Dort muss natürlich das Dollarzeichen weg.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Zitat von fireweasel Beitrag anzeigen
                Jaja, heutzutage geht ohne Google anscheinend nichts mehr ...



                PHP-Code:
                .. 
                Wie du siehst, geht das ganz einfach. Leider ist diese Methode auch nicht gerade besonders schnell.

                Der Rest ist Prozentrechnung ...
                uppss... das is ja ne ganze Lösung
                war schon dabei zu tüfteln, was die RGB´s für werte haben usw und nu lese ich hier gleich ne ganze Antwort *erfreutbin*

                die Geschwindigkeit ist nicht ganz so wichtig, dieser vorgang wird eigentlich nur alle 15 minuten einmal durchgeführt.

                Kommentar


                • #9
                  Zitat von AmicaNoctis Beitrag anzeigen
                  Dort muss natürlich das Dollarzeichen weg.
                  Yep, wird sofort entfernt, Meister|Mistress!

                  Ich hadere noch mit einer (für mich) neuen Tastatur und geändertem Tastaturlayout, da bin ich schon froh, dass man überhaupt noch erkennt, was ich ursprünglich tippen wollte ...
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar


                  • #10
                    Hallo fireweasel,

                    ich hab das ganze mal ausprobiert und hoffentlich dein $alpha!==0 richtig umgesetzt, allerdings stimm mein Ergebnis nicht

                    Entweder stimmt was an meinem Grafikformat nicht oder mein script selbst hat ein Fehler !?

                    ich hab die zugrundeligende Grafik mal geöffnet und es besitzt ein Transprarenten Hintergrund, daher denke ich mal, dass mein script irgendwo falsch abläuft.. kann das sein ?

                    liegt das eventuell daran, wie ich das bild mit [COLOR=Blue]imagecreatefromgif()[/COLOR] öffne ?


                    PHP-Code:
                    $alphaPixel   0;
                    $coloredPixel 0;
                    $img imagecreatefromgif 'images/pic.gif' );

                    $w imagesx($img);
                    $h imagesy($img);
                    for (
                    $y 0$y $h; ++$y
                    {
                      for (
                    $x 0$x $w; ++$x
                      {
                        
                    //nur fuer TrueColour-Images!
                        
                    $argb  imagecolorat($img$x$y); // true-colour RGB + alpha
                        
                    $rgb   0xffffff $argb// true-colour RGB
                        
                    $alpha = (0xff000000 $argb) >> 24;
                        
                    $alpha = ($alpha <= 127) ? $alpha 0;
                        
                    // alle Pixel mit $alpha !== 0 sind transparent
                        
                    if($alpha!==0)
                        {
                            
                    $alphaPixel++;
                        }
                        else
                        {
                            
                    $coloredPixel++;    
                        }
                        
                    #echo $alpha."<br>";
                        // ...
                        // zählen
                        // ...
                      
                    }

                    echo 
                    "Alle Pixel: ".($alphaPixel+$coloredPixel)."<br>";
                    echo 
                    "Transparente Pixel = ".$alphaPixel."<br>";
                    echo 
                    "Farbige Pixel: ".$coloredPixel."<br>";

                    // Ausgabe 
                    // Alle Pixel: 250390
                    // Transparente Pixel: 0
                    // Farbige Pixel: 250390 

                    Kommentar


                    • #11
                      Zitat von someRookie Beitrag anzeigen
                      liegt das eventuell daran, wie ich das bild mit [COLOR=Blue]imagecreatefromgif()[/COLOR] öffne ?
                      Ja, fireweasel wies bereits darauf hin, dass das nur für TrueColor funktioniert. Für indizierte Bilder musst du es zusätzlich mit [FONT="Courier New"]imagecolorsforindex($img, imagecolortransparent($img))[/FONT] abgleichen.
                      Zuletzt geändert von AmicaNoctis; 02.10.2009, 14:41.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        oh wow... da muss ich wohl ganz klar noch Büffeln, damit ich die Antwort überhaupt erst einmal verstehe

                        Kommentar


                        • #13
                          Ein paar Fragen, um das Büffeln zu beschleunigen: Weißt du, was der Unterschied zwischen indiziert und TrueColor ist? Weißt du, was eine Farbpalette ist? Weißt du, was der Unterschied zwischen Alphatransparenz und Indextransparenz ist? Soll die Lösung nur für GIF funktionieren oder auch für JPEG, PNG, ...?
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            Zitat von AmicaNoctis Beitrag anzeigen
                            Ein paar Fragen, um das Büffeln zu beschleunigen: Weißt du, was der Unterschied zwischen indiziert und TrueColor ist? Weißt du, was eine Farbpalette ist? Weißt du, was der Unterschied zwischen Alphatransparenz und Indextransparenz ist? Soll die Lösung nur für GIF funktionieren oder auch für JPEG, PNG, ...?
                            Unterschied inidziert- TrueColor : Nein
                            Farbpalette : ja, das sind alle enthaltenen bzw alle möglichen Farben
                            Alpha/index : Bruchstückhaft ? alphatransparenz stell in GIf keine wirkliche transparenz dar, sondern die indextransparenz ?

                            Die Lösung soll nur für GIF funktionieren !

                            Kommentar


                            • #15
                              Zitat von someRookie Beitrag anzeigen
                              Die Lösung soll nur für GIF funktionieren !
                              In GIF haben die einzelnen Pixel keine Farbe sondern einen Index. Außerdem enthält ein GIF eine Farbpalette. Das ist eine Tabelle, in der für jeden solchen Index die Farbe gespeichert ist. Ändert man einen Eintrag in dieser Palette, ändert sich automatisch die Farbe aller Pixel, die auf diesen Eintrag zeigen.

                              Indextransparenz ist in GIF so gelöst, dass ein Index (also ein Paletteneintrag) als transparent definiert wird.

                              imagecolortransparent($img) gibt dir diesen Index zurück, der im Bild als transparent definiert ist und den speicherst du, z. B. in $transIndex.

                              imagecolorat liefert für indizierte Bilder nicht die Farbe zurück, sondern den Index. Den musst du nur mit $transIndex vergleichen.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X