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

PHP 使用 Imagick 獲取圖片主色調 (RGB) 高效演算法

     編輯:PHP 相關知識

PHP 使用 Imagick 獲取圖片主色調 (RGB) 高效演算法

傳統遍歷像素點統計 RGB 出現次數效率低且不精準。利用 Imagick quantizeImage() 降色至指定調色盤,再配合 uniqueImageColors() 取得代表色,可高效提取圖片主色調。

核心代碼

<?php
$average = new Imagick("xiaocai.jpg");

// 1. 降色至 10 色 RGB 空間,不抖動
$average->quantizeImage(10, Imagick::COLORSPACE_RGB, 0, false, false);

// 2. 合併相近顏色,保留唯一代表色
$average->uniqueImageColors();

// 3. 遍歷像素迭代器取得顏色陣列
function GetImagesColor(Imagick $im) {
    $colorarr = array();
    $it = $im->getPixelIterator();
    $it->resetIterator();
    while ($row = $it->getNextIteratorRow()) {
        foreach ($row as $pixel) {
            $colorarr[] = $pixel->getColor();  // 返回 ['r'=>..., 'g'=>..., 'b'=>..., 'a'=>...]
        }
    }
    return $colorarr;
}

$colors = GetImagesColor($average);

// 4. 輸出色塊預覽
foreach ($colors as $val) {
    printf(
        '<div style="background-color: rgb(%d,%d,%d); width:50px; height:50px; float:left; margin:2px;" title="RGB(%d,%d,%d)"></div>',
        $val['r'], $val['g'], $val['b'],
        $val['r'], $val['g'], $val['b']
    );
}
?>

關鍵方法解析

方法作用
quantizeImage($colors, $colorspace, $treedepth, $dither, $measureError)將圖片減色至 $colors 個顏色。$treedepth=0 讓 Imagick 自動決定。$dither=false 禁用抖動保持色塊純淨
uniqueImageColors()移除重複/極相似顏色,只保留唯一代表色
getPixelIterator()返回像素迭代器,逐行逐像素高效遍歷,避免載入整圖到記憶體

進階:取得單一主色調 (加權平均)

function getDominantColor($imagePath, $paletteSize = 5) {
    $im = new Imagick($imagePath);
    $im->quantizeImage($paletteSize, Imagick::COLORSPACE_RGB, 0, false, false);
    $im->uniqueImageColors();
    
    $histogram = $im->getImageHistogram();  // 顏色頻率直方圖
    $maxCount = 0;
    $dominant = ['r'=>0,'g'=>0,'b'=>0];
    
    foreach ($histogram as $pixel) {
        $color = $pixel->getColor();
        $count = $pixel->getColorCount();
        if ($count > $maxCount) {
            $maxCount = $count;
            $dominant = $color;
        }
    }
    return $dominant;  // 含 r,g,b,a
}

環境需求

  • PHP imagick 擴展 (非 ImageMagick CLI)
  • 安裝:pecl install imagick 或 yum/apt install php-imagick
  • ImageMagick 底層庫版本建議 6.9+ / 7.x

效能對比

  • 遍歷像素:1000x1000 圖片 ~2-5 秒,記憶體佔用大
  • Imagick 降色:同尺寸 ~50-200ms,C 層優化,極快
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved