Durchschnitt
Ausnahmsweise gibt es dieses Mal keinen Artikel zum Thema Fotografie. Indirekt geht es aber um Bilder. Ich habe den folgenden PHP-Code geschrieben, um mir die durchschnittliche Farbe eines Bildes auszurechnen. Diesen RGB-Wert konnte ich danach als Hintergrund für die Seite verwenden, die meine Fotos auf Flickr anzeigt. Der Code setzt das GD-Modul für PHP voraus.
-
// $imagepath ist der Pfad zur lokalen JPEG-Datei, z.B. einem Thumbnail
-
// des Bildes, dessen Farbe ermittelt werden soll.
-
$src = @imagecreatefromjpeg($imagepath);
-
if ($src) {
-
$src_width = imagesx($src);
-
$src_height = imagesy($src);
-
$dst = imagecreatetruecolor(1, 1);
-
imagecopyresampled($dst, $src, 0, 0, 0, 0, 1, 1, $src_width, $src_height);
-
$color = imagecolorat($dst, 0, 0);
-
$alpha = ($color>> 24) & 0xFF;
-
$red = ($color>> 16) & 0xFF;
-
$green = ($color>> 8) & 0xFF;
-
$blue = ($color) & 0xFF;
-
imagedestroy($src);
-
imagedestroy($dst);
-
}


Coole Idee. Finde es auch gut anzusehen. Bin mir aber nicht ganz sicher, ob ich das selbst wirklich nutzen wollen würde.
Nette Idee. Frage mich ob das in allen fällen eine schöne & passende Farbe generiert, aber es sieht zumindest in deinen Beispielen so aus.
Danke.
Es ist okay genug für mich – vor allem vor dem Hintergrund dass 99% derjenigen die meine Fotos betrachten das eh bei Flickr machen.
Als nächsten Schritt könnte man auch komplementäre Töne ausrechnen, um die anderen Elemente der individualisierten Foto-Ansicht zu optimieren.
So ganz passt das aber nicht, oder?
http://96dpi.de/flickr/photo/show/3206661372
Der rechnerische Durchschnitt wäre ein Grauwert von 212. Tatsächlich wird ein Hintergrund mit Grauwert 105 verwendet? Oder rechnest Du das bewusst dunkler?
Die Interpolation von ImagecopyResampled ist hier übrigens sehr gut. Wenn man ein Script mal Pixel für Pixel im Bild analysieren lässt und so den mathematischen Durchschnitt errechnet, so weicht das Ergebnis nur minimal vom Farbwert des mit ImageCopyResampled erzeugten Pixels ab.
Ich halbiere auf meiner Webseite die Helligkeit jedes Kanals auf die Hälfte, richtig. Im Moment überlege ich auch, das Script um Funktionen zur Festlegung von Komplementärfarben für Schrift und Co. zu erweitern.
Nette Idee. Allerdings würde ich auf jeden Fall die Ergebnisse (zumindestens zwischen) speichern. Weil so dauert das Laden jetzt relativ lange.
PS: Die Fotoseite ist nicht Fenstergrößenänderungskompatibel
Achso. Das ganze muss eigentlich so aussehen.
function ambilight($imagepath){
[...]
}
Ahhhh! Nicht das ich jetzt von einem großen Hersteller von Unterhaltungselektronik abgemahnt werde. Die Performance der Fotoseite ist insgesamt (und auch schon vorher) Mist. Das liegt u.a. daran, dass ich zu viele API-Calls pro Seite brauche, weil die Persistenz noch nicht gut genug entwickelt ist.