Überprüfen Sie die GD functions.
Hier ist eine Lösung von looping through the pixels die häufigste Farbe zu finden. Aber you could just resize the image to 1 pixel - das sollte die durchschnittliche Farbe sein - oder?
Ein Beispiel für die 1px-Methode (jetzt einschließlich Testseite):
<?php
$filename = $_GET['filename'];
$image = imagecreatefromjpeg($filename);
$width = imagesx($image);
$height = imagesy($image);
$pixel = imagecreatetruecolor(1, 1);
imagecopyresampled($pixel, $image, 0, 0, 0, 0, 1, 1, $width, $height);
$rgb = imagecolorat($pixel, 0, 0);
$color = imagecolorsforindex($pixel, $rgb);
?>
<html>
<head>
<title>Test Image Average Color</title>
</head>
<body style='background-color: rgb(<?php echo $color['red'] ?>, <?php echo $color['green'] ?>, <?php echo $color['blue'] ?>)'>
<form action='' method='get'>
<input type='text' name='filename'><input type='submit'>
</form>
<img src='<?php echo $filename ?>'>
</body>
</html>
Hier einige Beispiel-Code die durchschnittliche Grenze Farbe, ähnlich dem ersten Link zu finden. Für Ihre Verwendung kann dies besser funktionieren (Ich weiß, dass dieser Code ineffizient ist, aber hoffentlich ist es einfach folgen):
<?php
$filename = $_GET['filename'];
$image = imagecreatefromjpeg($filename);
$width = imagesx($image);
$height = imagesy($image);
for($y = 0; $y < $height; $y++){
$rgb = imagecolorat($image, 0, $y);
$color = imagecolorsforindex($image, $rgb);
$red += $color['red'];
$green += $color['green'];
$blue += $color['blue'];
$rgb = imagecolorat($image, $width -1, $y);
$color = imagecolorsforindex($image, $rgb);
$red += $color['red'];
$green += $color['green'];
$blue += $color['blue'];
}
for($x = 0; $x < $height; $x++){
$rgb = imagecolorat($image, $x, 0);
$color = imagecolorsforindex($image, $rgb);
$red += $color['red'];
$green += $color['green'];
$blue += $color['blue'];
$rgb = imagecolorat($image, $x, $height -1);
$color = imagecolorsforindex($image, $rgb);
$red += $color['red'];
$green += $color['green'];
$blue += $color['blue'];
}
$borderSize = ($height=$width)*2;
$color['red'] = intval($red/$borderSize);
$color['green'] = intval($green/$borderSize);
$color['blue'] = intval($blue/$borderSize);
?>
aktualisieren: Ich habe einige more refined code on github. Dies umfasst sowohl die Mittelung der Grenze als auch die Mittelung des gesamten Bildes. Es sollte beachtet werden, dass die Größenanpassung auf 1 Pixel viel ressourcenschonender ist als das Scannen jedes Pixels (obwohl ich keine Echtzeittests durchgeführt habe), aber der Code zeigt die drei verschiedenen Methoden.
Haben Sie jemals funktioniert? –