Bildfarbe erhalten

Lesezeit: 3 Minuten

Ich möchte Bilder in Divs oder Tabellen als Hintergrund anzeigen. Wenn die Bilder nicht groß genug sind, muss ich die äußerste Farbe dieses Bildes finden und sie auf den Hintergrund des enthaltenden div oder der Tabellenzelle anwenden.

Hat jemand Erfahrung damit? Bei PHP. Ich bin ein Noob, also bitte erklären. Ich danke dir sehr

Bildfarbe erhalten
Tim Lytle

Besuche die GD-Funktionen.

Hier ist eine Lösung von Schleife durch die Pixel um die häufigste Farbe zu finden. Jedoch, Sie könnten das Bild einfach auf 1 Pixel verkleinern – das sollte die durchschnittliche Farbe sein – richtig?

Ein Beispiel für die 1px-Methode (jetzt inklusive 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="https://stackoverflow.com/questions/1746530/<?php%20echo%20$filename%20?>">
  </body>
</html>

Hier ist ein Beispielcode zum Ermitteln des Durchschnitts Grenze Farbe, ähnlich dem ersten Link. Für Ihre Verwendung funktioniert dies möglicherweise besser (Ich weiß, dass dieser Code ineffizient ist, aber hoffentlich ist er einfach zu befolgen):

<?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 verfeinerter Code auf github. Dies umfasst sowohl die Mittelung des Randes als auch die Mittelung des gesamten Bildes. Es sollte beachtet werden, dass die Größenänderung auf 1 Pixel weitaus ressourcenschonender ist als das Scannen jedes Pixels (obwohl ich keine Echtzeittests durchgeführt habe), aber der Code zeigt die drei verschiedenen Methoden.

  • Entschuldigung, aber ich bin ein Anfänger, wie würde ich das auf ein div für die Hintergrundfarbe anwenden? Irgendeine Idee Tim. Danke, dass du das auch vorgeschlagen hast, es bedeutet viel.

    Benutzer212578

    17. November 09 um 4:50 Uhr

  • Ich habe den Code für eine vollständige ‘Testseite’ hinzugefügt. Das sollte Sie in die richtige Richtung weisen.

    – Tim Lytle

    17. November 09 um 4:53 Uhr

  • Das ist großartig, danke Tim. Ich möchte nicht, dass Ihre Arbeit ungenutzt bleibt, aber ich komme immer noch nicht zur Arbeit. riptapparel.com/test/get-image-color.php ist der Test … Ich bin mir nicht sicher, ob ” und ‘ verwirrt sind usw. Außerdem, sobald ich diesen neuen Code eingefügt habe, wie kann ich ihn in den Hintergrund des div rufen? Genau wie Ihr erstes Beispiel, nehme ich an »Danke und Entschuldigung für die Verärgerung.

    Benutzer212578

    17. November 09 um 5:23 Uhr

  • Ersetzen Sie einfach den Anfangsblock des PHP-Codes im ersten Beispiel (der den HTML-Code enthält) durch das zweite Beispiel.

    – Tim Lytle

    17. November 09 um 5:38 Uhr

  • Ich erhalte diese Fehler immer wieder, nachdem ich „Dateiname“ durch „image.jpg“ ersetzt habe. Warnung: imagecreatefromjpeg() [function.imagecreatefromjpeg]: Der Dateiname darf in /path/get-image-color.php in Zeile 3 nicht leer sein. Warnung: imagesx(): Das angegebene Argument ist keine gültige Bildressource in /path/get-image-color.php in Zeile 4. Warnung: imagesy (): Das angegebene Argument ist keine gültige Bildressource in /path/get-image-color.php in Zeile 5 Warnung: Division durch Null in /path/get-image-color.php in Zeile 36 Warnung: Division durch Null in /path/get-image-color.php in Zeile 37

    Benutzer212578

    17. November 09 um 13:49 Uhr

.

784190cookie-checkBildfarbe erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy