PHP Conference Japan 2024

imagecolorresolve

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecolorresolve取得指定顏色的索引或最接近的替代顏色索引

說明

imagecolorresolve(
    GdImage $image,
    int $red,
    int $green,
    int $blue
): int

此函式保證會傳回所請求顏色的顏色索引,該索引可能是確切的顏色或最接近的替代顏色。

如果您是從檔案建立影像,則只會解析影像中使用的顏色。調色盤中僅有的顏色不會被解析。

參數

image

一個 GdImage 物件,由影像建立函式之一返回,例如 imagecreatetruecolor()

red

紅色成分的值。

green

綠色成分的值。

blue

藍色成分的值。

傳回值

傳回顏色索引。

更新日誌

版本 說明
8.0.0 image 現在需要一個 GdImage 實例;先前,需要一個有效的 gd 資源

範例

範例 #1 使用 imagecoloresolve() 從影像中取得顏色

<?php
// 載入影像
$im = imagecreatefromgif('phplogo.gif');

// 從影像中取得最接近的顏色
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);

// 輸出
print_r($colors);

imagedestroy($im);
?>

上述範例將輸出類似以下的內容

Array
(
    [0] => 89
    [1] => 85
)

參見

新增註解

使用者提供的註解 1 則註解

1
ceo at l-i-e dot com
22 年前
好的,所以有時獲得您想要的確切顏色非常重要,只是它不在影像中,而 ImageColorResolve 並不夠「接近」。

以下程式碼是一個非常糟糕的駭客行為,速度很慢,但它確實可以做到這一點。

$colorcount = array();
for ($x = 0; $x < $width; $x++){
for ($y = 0; $y < $height; $y++){
$colorindex = imagecolorat($jpg, $x, $y);
if (!isset($colorcount[$colorindex])){
$colorcount[$colorindex] = 1;
}
else{
$colorcount[$colorindex]++;
}
}
}
asort($colorcount);
reset($colorcount);

$black = imagecolorexact($jpg, 0, 0, 0);
if ($black == -1){
$goner = key($colorcount);
$rgb = imagecolorsforindex($jpg, $goner);
#error_log("需要黑色:即將移除 $goner ($rgb[red], $rgb[green], $rgb[blue]),該顏色僅在 $colorcount[$goner] 個像素中使用", 0);
unset($colorcount[$goner]);
imagecolordeallocate($jpg, $goner);
$black = imagecolorallocate($jpg, 0, 0, 0);
}
if ($black == -1){
$black = imagecolorresolve($jpg, 0, 0, 0);
#error_log("糟糕!仍然無法配置顏色!", 0);
}
To Top