卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

利用PHP的GD库来自动识别图片颜色代码

要实现一个PHP脚本来自动识别图片的主要颜色,并将其分类为红色、橙色、黄色、绿色、青色、蓝色、紫色、棕色、白色、黑色、灰色等颜色,可以使用PHP的GD库来处理图像,并通过计算图像中像素的颜色值来确定主要颜色。
以下是一个简单的PHP脚本示例:
<?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;
 
?>

说明:

getDominantColor 函数:该函数读取图像并遍历每个像素,计算每个像素的颜色分类,并统计每种颜色的出现次数。最后返回出现次数最多的颜色。
classifyColor 函数:该函数根据RGB值将颜色分类为预定义的颜色类别。首先将RGB转换为HSV颜色空间,然后根据HSV值进行分类。
rgbToHsv 函数:该函数将RGB颜色值转换为HSV颜色空间,以便更容易地进行颜色分类。

使用方法:

将脚本保存为PHP文件,并将 $imagePath 变量设置为你要分析的图像路径。
运行脚本,脚本将输出图像的主要颜色。

注意事项:

该脚本是一个简单的示例,适用于小图像。对于大图像,遍历每个像素可能会比较耗时。
颜色分类的准确性取决于HSV值的阈值设置,可能需要根据具体需求进行调整。
卓越飞翔博客
上一篇: 自用IP、DNS切换BAT脚本 多网络接口IP切换工具
下一篇: bat批处理,删除目录里不在文件列表里的文件
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏