首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 獲取圖片平均顏色值:逐像素掃描與 RGB 通道統計實作

     編輯:PHP 相關知識

前言

分析圖片主色調常用於縮圖邊框、背景色自動適配、視覺化分類等場景。最直觀的方法是遍歷所有像素,累加 RGB 三通道數值並取平均。本文提供完整 PHP 實作碼與優化建議。

基本實作

<?php
$imagePath = "photo3.jpg"; // 請確保路徑正確
$img = imagecreatefromjpeg($imagePath);
if (!$img) die("無法載入圖片");

$width = imagesx($img);
$height = imagesy($img);

$rTotal = $gTotal = $bTotal = 0;
$total = 0;

for ($x = 0; $x < $width; $x++) {
    for ($y = 0; $y < $height; $y++) {
        $rgb = imagecolorat($img, $x, $y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;

        $rTotal += $r;
        $gTotal += $g;
        $bTotal += $b;
        $total++;
    }
}

$rAvg = round($rTotal / $total);
$gAvg = round($gTotal / $total);
$bAvg = round($bTotal / $total);

echo "平均顏色 RGB: ($rAvg, $gAvg, $bAvg)";
echo "<br>十六進位: #" . sprintf("%02x%02x%02x", $rAvg, $gAvg, $bAvg);

imagedestroy($img);

效能優化方向

  1. 縮圖後再掃描:對大圖先用 imagescale() 縮小至 100x100 像素,大幅減少迴圈次數,誤差極小。
  2. 取樣掃描:每隔 N 個像素取樣一次(如步長 5),速度提升 25 倍,結果近似。
  3. 使用 ImageMagick:exec("convert image.jpg -resize 1x1 txt:-") 可直接取得單像素平均色,速度極快。
  4. 直方圖統計:GD 的 imagecolorstotal() 配合調色盤模式可避免逐像素操作,但僅適用 256 色圖片。

應用範例:動態生成主色調 CSS 變數

$hex = sprintf("#%02x%02x%02x", $rAvg, $gAvg, $bAvg);
echo ":root { --image-dominant-color: $hex; }";

總結

逐像素掃描雖簡單易懂,但對大圖效能較差。實務上建議結合縮圖或取樣策略,或直接呼叫 ImageMagick 以獲得最佳效能與準確度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved