imageColorAt

tobee

Erfahrenes Mitglied
Halló,

ich weis jetzt wie ich den rgb des Bildes ermittel.
PHP:
<?php
$im = ImageCreateFromPng("rockym.png");
$rgb = ImageColorAt($im, 100, 100);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
?>

Aber jetzt müsste ich es in einen Hexadezimalcode umwandeln.
Wie geht'n das?

Tobee
 
Irgendwas mach ich noch falsch:
PHP:
$rgba = imagecolorat($im,$x,$y);
$alpha = ($rgba & 0x7F000000) >> 24;
$red = ($rgba & 0xFF0000) >> 16;
$green = ($rgba & 0x00FF00) >> 8;
$blue = ($rgba & 0x0000FF);

echo "#" . $red . $green . $blue;

Ausgabe zum Beispiel:
#255255255
#112112112


Tobee
 
Ich hab mal ein kleines Programm geschrieben, aber meine PC Leistung leidet sehr darunter.
Könnte man das noch verbessern?

PHP:
<?php
/* Config */
$datei = "test.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>";


?>

Tobee
 
Speichere die einzelnen Ausgaben mal in einer Variable und gib diese am Ende aus. Vielleicht ist eine Tabelle für soetwas auch nicht das geeignetste Mittel.
 
Sonst würde mir nur noch einzelne Divs einfallen die eine feste Position haben?

z.B.
HTML:
<div style="position:absolute; top:10px; left:12px; background-color:#ffffff"></div>

Tobee
 
> $rgba = imagecolorat($im,$x,$y);

hmm:
$rgba = imagecolorsforindex($im, imagecolorat($im, $x, $y));
$R = $rgba['red'];
$G = $rgba['green'];
$B = $rgba['blue'];
 
Hallo,

Ich hab mal ein kleines Programm geschrieben, aber meine PC Leistung leidet sehr darunter.
dir ist schon klar, dass der Prozess, ein Bild Pixel für Pixel auf den Farbwert hin zu untersuchen, recht CPU intensiv ist oder?

Es würde vielleicht auch reichen, wenn du den Farbwert alle 2 oder 3 Pixel ermittelst - ich vermute mal du willst das Bild prozentual in gefundene Farbwerte untereteilen, um an anderer Stelle nach Farbenintesivität suchen zu können. Eine weitere Überlegung wäre, das Script als Batch Skript im Hintergrund (Als Cronjob, oder Task - wie auch immer) laufen zu lassen und dann alle paar Pixel eine kleine Verschnaufpause für die CPU einzubauen.

cu
Robert
 
dir ist schon klar, dass der Prozess, ein Bild Pixel für Pixel auf den Farbwert hin zu untersuchen, recht CPU intensiv ist oder?
Ja, ist mir bekannt.

Es gibt doch sicher bei php auch sowas wie ein Timeout.
Dann wäre der CPU ein bißchen entlastet.

Tobee
 
Zurück