使用方法:
- <?php
- function getDominantColor($imagePath) {
- // 打开图像
- $image = imagecreatefromjpeg($imagePath); // 如果是其他格式的图像,可以使用 imagecreatefrompng 或 imagecreatefromgif
- $width = imagesx($image);
- $height = imagesy($image);
- $totalPixels = $width * $height;
- $colorCounts = [];
- // 遍历图像的每个像素
- for ($x = 0; $x < $width; $x++) {
- for ($y = 0; $y < $height; $y++) {
- $rgb = imagecolorat($image, $x, $y);
- $r = ($rgb >> 16) & 0xFF;
- $g = ($rgb >> 8) & 0xFF;
- $b = $rgb & 0xFF;
- // 将颜色分类
- $color = classifyColor($r, $g, $b);
- if (!isset($colorCounts[$color])) {
- $colorCounts[$color] = 0;
- }
- $colorCounts[$color]++;
- }
- }
- // 找到出现次数最多的颜色
- arsort($colorCounts);
- return key($colorCounts);
- }
- function classifyColor($r, $g, $b) {
- // 将RGB颜色转换为HSV颜色空间
- list($h, $s, $v) = rgbToHsv($r, $g, $b);
- // 根据HSV值分类颜色
- if ($v < 10) return '黑色';
- if ($s < 10 && $v > 90) return '白色';
- if ($s < 10 && $v < 90) return '灰色';
- if ($h < 15) return '红色';
- if ($h < 45) return '橙色';
- if ($h < 70) return '黄色';
- if ($h < 150) return '绿色';
- if ($h < 195) return '青色';
- if ($h < 255) return '蓝色';
- if ($h < 285) return '紫色';
- if ($h < 330) return '红色'; // 再次红色,因为HSV是环形的
- return '棕色';
- }
- function rgbToHsv($r, $g, $b) {
- $r = $r / 255;
- $g = $g / 255;
- $b = $b / 255;
- $max = max($r, $g, $b);
- $min = min($r, $g, $b);
- $delta = $max - $min;
- $v = $max;
- if ($delta == 0) {
- $h = 0;
- $s = 0;
- } else {
- $s = $delta / $max;
- if ($r == $max) {
- $h = 60 * fmod((($g - $b) / $delta), 6);
- } elseif ($g == $max) {
- $h = 60 * ((($b - $r) / $delta) + 120;
- } else {
- $h = 60 * ((($r - $g) / $delta) + 240;
- }
- }
- if ($h < 0) {
- $h += 360;
- }
- return [intval($h), intval($s * 100), intval($v * 100)];
- }
- // 使用示例
- $imagePath = 'path/to/your/image.jpg';
- $dominantColor = getDominantColor($imagePath);
- echo "图片的主要颜色是: " . $dominantColor;
- ?>
将脚本保存为PHP文件,并将 $imagePath 变量设置为你要分析的图像路径。运行脚本,脚本将输出图像的主要颜色。
注意事项:
该脚本是一个简单的示例,适用于小图像。对于大图像,遍历每个像素可能会比较耗时。颜色分类的准确性取决于HSV值的阈值设置,可能需要根据具体需求进行调整。