📅  最后修改于: 2023-12-03 15:03:40.219000             🧑  作者: Mango
在图像处理中,提取图片中的主色调是一项常见的任务。其中,一种常见的需求是提取图片中的主要蓝色调。在 PHP 中,我们可以通过创建 getImageBluePrimary() 函数来实现该需求。
该函数可用于从指定的图像文件中提取主要蓝色调,并返回一个包含该颜色调 RGB 值的数组。下面,我们将会详细讲解这个函数的实现。
getImageBluePrimary() 函数接受两个参数:
getImageBluePrimary($imageFilePath, $tolerance = 10)
其中,$imageFilePath 参数为需要提取主要蓝色调的图像文件路径,$tolerance 参数为提取蓝色调时的容差值。容差值默认为 10,越小表示提取颜色时越严格。
getImageBluePrimary() 函数将会返回一个包含主要蓝色调 RGB 值的数组。该数组包含 3 个元素,分别代表该颜色的 R、G、B 值。例如:
Array(
[0] => 10, // R 值
[1] => 50, // G 值
[2] => 200 // B 值
)
为了实现获取图像中主要蓝色调的功能,我们需要经过如下几个步骤:
具体实现如下:
function getImageBluePrimary($imageFilePath, $tolerance = 10) {
// 读取图像文件,转换为 RGB 模式
$image = imagecreatefromstring(file_get_contents($imageFilePath));
imagecolortransparent($image, imagecolorallocatealpha($image, 0, 0, 0, 127));
imagealphablending($image, false);
imagesavealpha($image, true);
imagepalettetotruecolor($image);
// 定义蓝色色值
$blue = array(0, 0, 255);
$width = imagesx($image);
$height = imagesy($image);
$pixels = [];
$pixelCount = 0;
for($y = 0; $y < $height; $y++) {
for($x = 0; $x < $width; $x++) {
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$distance = sqrt(pow($r - $blue[0], 2) + pow($g - $blue[1], 2) + pow($b - $blue[2], 2));
if ($distance <= $tolerance) {
$pixels[] = [$r, $g, $b];
$pixelCount++;
}
}
}
if ($pixelCount == 0) {
return false; // 未找到蓝色区域
} else {
$totalR = 0;
$totalG = 0;
$totalB = 0;
foreach($pixels as $pixel) {
$totalR += $pixel[0];
$totalG += $pixel[1];
$totalB += $pixel[2];
}
return [
round($totalR/$pixelCount),
round($totalG/$pixelCount),
round($totalB/$pixelCount)
];
}
}
通过 getImageBluePrimary() 函数,我们可以轻松地从图像文件中提取主要蓝色调,便于我们进行后续的图像处理工作。