Bildupload + Farbanteil (%) anzeigen

lll192837465lll

Erfahrenes Mitglied
Hallo Zusammen

Ich hatte eine kleine Idee und wollte dazu fragen ob es irgendwie möglich ist, dass man bei einem hochgeladenen Bild die einzelnen Farben analysieren kann und dann automatisch alle Farben die gebraucht wurden ausgeben und wieviel Prozent diese im Bild haben. Das heisst, wenn das Bild verläufe hat, werden ja auch andere Farben generiert, welche nicht "hauptentscheidend" sind, welche warscheinlich 1% oder weniger sind. Abe rich meine z.b. ab 10% oder so in etwa...

Gibt es da so etwas? :)
Oder irgendeine Funktion?

Wàre Toll wenn das jemand wüsste..

Danke!
 
Ev kannst du mit einem der Befehlen was anfangen:
imagecolorstotal()
imagecolorsforindex()

Oder du tastest dein Bild selber ab
imagecolorat()
 
Danke! Ich habe in der Zwischenzeit einmal nach diesen Begriffen gesucht und mich schlau gemacht.
Dazu habe ich auch noch folgendes Thema gefunden:

http://www.tutorials.de/forum/php/247616-imagecolorat.html

Aber in diesem Script wird ja schlussendlich nur eine Farbe ausgegeben oder? Und zwar die Mischfarbe vom Bild oder wie muss ich das sehen?
Und wie kann ich die Farben einander "zuweisen", damit der weiss dass es dieselbe Farbe ist und sich somit prozentual erhöht?

Vielen Dank!
 
Eine Histogrammfunktion könnte helfen, oder du initialisierst ein 1dimensionales Array und erhöhst den Wert eines Feldes um 1, wenn die Farbe gefunden wird (Key ist zb die Hexform der Farbe und Value wird inkrementiert).

Vorsicht Pseudocode:
PHP:
for x=0 to Bildbreite
  for y=0 to Bildhoehe
   farbe=getpixel(x,y);
   Hexfarbe=farbezuHex(farbe);
   farbarray[Hexfarbe]++;
  next
next

sort farbarray();
//feddich

mfg chmee
 
Danke

Aber nochmals zum script aus dem anderen Thread, also das gibt bei mir die Hexadezimalzahlen nicht aus? o.O

PHP:
<?php
/* Config */
$datei = "baum.jpg";

$info = getimagesize($datei);
$imageX = $info[0];
$imageY = $info[1];
$image = imagecreatefromjpeg($datei);

echo "<table cellpadding=\"0\" cellspacing=\"0\">";
for($x = 0; $x < $imageX; $x++)    {
  echo "<tr>";
  for($y = 0; $y < $imageY; $y++)    {
      $rgb = imagecolorat($image, $x, $y);
      echo "<td style=\"width:1px; height:1px; background-color:" . dechex($rgb) . ";\"></td>";
    }
    echo "</tr>";
}
echo "</table>";


?>


Dazu stellt sich natürlich auch die Frage, kann man nicht irgendwie eine if / else abfrage einbauen, welche prüft ob die Farbe schon einmal vorgekommen ist, und wenn ja i+1 zählt, und dann sich somit summiert und man am schluss den Wert hat. müsste doch auch gehen oder nicht?
 
Die if abfrage macht es mE sehr langsam. Es geht um viele viele viele Schleifendurchgänge. Um 1 erhöhen, egal ob schon existent oder nicht und am Ende sortieren lassen.

Man könnte die Sache optimieren und das Bild runterrechnen lassen auf unter 10px Kantenlänge, das wäre dann ein farblicher Mittelwert. Im härtesten Fall auch auf 1x1px runterrechnen lasen und auslesen.

Die Grundidee und die grad genannte werden sich vom Ergebnis aber deutlich unterscheiden..

mfg chmee

p.s.: imagecolorat gibt als Rückgabewert eine sogenannte ColorID..was das auch immer sein soll.
Schau zB Hier -> http://www.php-resource.de/forum/showthread/t-12793.html

p.p.s.: dechex() ist Decimal zu Hexadezimal, Du musst aus der ColorID noch 3xDezimal extrahieren. Link hier drüber.
 
Zurück