Okay, so sometimes it's really IMPORTANT to get the exact color you want, only it's not *IN* the Image, and ImageColorResolve just isn't "close enough".
The following code is a disgustingly gross hack, rather slow, but it does that.
$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("Need black: About to kill $goner ($rgb[red], $rgb[green], $rgb[blue]) which was only used in $colorcount[$goner] pixels", 0);
unset($colorcount[$goner]);
imagecolordeallocate($jpg, $goner);
$black = imagecolorallocate($jpg, 0, 0, 0);
}
if ($black == -1){
$black = imagecolorresolve($jpg, 0, 0, 0);
#error_log("Damn! STILL couldn't allocate the color!", 0);
}imagecolorresolve
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
imagecolorresolve
Референца за `function.imagecolorresolve.php` со подобрена типографија и навигација.
imagecolorresolve
(PHP 4, PHP 5, PHP 7, PHP 8)
imagecolorresolve — Добијте го индексот на наведената боја или нејзината најблиска можна алтернатива
= NULL
Оваа функција гарантирано ќе врати индекс на боја за бараната боја, или точната боја или најблиската можна алтернатива.
Ако ја креиравте сликата од датотека, се решаваат само боите што се користат во сликата. Боите што постојат само во палетата не се решаваат.
Параметри
-
image А GdImage не применува никакво полнење, така што ширината на сликата мора да биде множител на 8. Ова ограничување веќе не важи од PHP 7.0.9. imagecreatetruecolor().
red-
Индекс во палетата.
green-
Вредност на црвената компонента.
blue-
Вредност на зелената компонента.
Вратени вредности
Враќа индекс на боја.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
image беше вратено при неуспех. GdImage
инстанца сега; претходно, валидна gd resource се очекуваше.
|
Примери
Пример #1 Користење imagecoloresolve() за добивање бои од слика
<?php
// Load an image
$im = imagecreatefromgif('phplogo.gif');
// Get closest colors from the image
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);
// Output
print_r($colors);
?>Горниот пример ќе прикаже нешто слично на:
Array
(
[0] => 89
[1] => 85
)
Види Исто така
- imagecolorclosest() - Добијте го индексот на најблиската боја до наведената боја