PHP Conference Nagoya 2025

ImagickPixel::isSimilar

(PECL imagick 2, PECL imagick 3)

ImagickPixel::isSimilarVérifie la distance entre 2 couleurs

Description

public ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): bool
Avertissement

Cette fonction est actuellement non documentée ; seule la liste des arguments est disponible.

Vérifie la distance entre la couleur décrite par l'objet ImagickPixel et celle de l'objet fourni, en plaçant leurs valeurs RGB sur le cube de couleur. Si la distance entre les 2 points est inférieure à la valeur du paramètre fuzz, la couleur est similaire. Obsolète en faveur de la méthode ImagickPixel::isPixelSimilar().

Liste de paramètres

color

L'objet ImagickPixel utilisé pour la comparaison.

fuzz

La distance maximale utilisée pour considérer que les couleurs sont similaires. La valeur maximale théorique est la racine carré de 3 (1.732).

Valeurs de retour

Retourne true en cas de succès.

Exemples

Exemple #1 Exemple avec ImagickPixel::isSimilar()

<?php
// Le test ci-dessous a été écrit avec une distance maximale de 255,
// aussi, nous devons le mettre à l'échelle avec une racine carrée de 3 -
// la longueur de la diagonale d'un cube.
$root3 = 1.732050807568877;

$tests = array(
[
'rgb(245, 0, 0)', 'rgb(255, 0, 0)', 9 / $root3, false,],
[
'rgb(245, 0, 0)', 'rgb(255, 0, 0)', 10 / $root3, true,],
[
'rgb(0, 0, 0)', 'rgb(7, 7, 0)', 9 / $root3, false,],
[
'rgb(0, 0, 0)', 'rgb(7, 7, 0)', 10 / $root3, true,],
[
'rgba(0, 0, 0, 1)', 'rgba(7, 7, 0, 1)', 9 / $root3, false,],
[
'rgba(0, 0, 0, 1)', 'rgba(7, 7, 0, 1)', 10 / $root3, true,],
[
'rgb(128, 128, 128)', 'rgb(128, 128, 120)', 7 / $root3, false,],
[
'rgb(128, 128, 128)', 'rgb(128, 128, 120)', 8 / $root3, true,],
[
'rgb(0, 0, 0)', 'rgb(255, 255, 255)', 254.9, false,],
[
'rgb(0, 0, 0)', 'rgb(255, 255, 255)', 255, true,],
[
'rgb(255, 0, 0)', 'rgb(0, 255, 255)', 254.9, false,],
[
'rgb(255, 0, 0)', 'rgb(0, 255, 255)', 255, true,],
[
'black', 'rgba(0, 0, 0)', 0.0, true],
[
'black', 'rgba(10, 0, 0, 1.0)', 10.0 / $root3, true],);

$output = "<table width='100%' class='infoTable'><thead>
<tr>
<th>
Color 1
</th>
<th>
Color 2
</th>
<th>
Test distance * 255
</th>
<th>
Is within distance
</th>
</tr>
</thead>"
;

$output .= "<tbody>";

foreach (
$tests as $testInfo) {
$color1 = $testInfo[0];
$color2 = $testInfo[1];
$distance = $testInfo[2];
$expectation = $testInfo[3];
$testDistance = ($distance / 255.0);

$color1Pixel = new \ImagickPixel($color1);
$color2Pixel = new \ImagickPixel($color2);

$isSimilar = $color1Pixel->isPixelSimilar($color2Pixel, $testDistance);


if (
$isSimilar !== $expectation) {
echo
"Test distance failed. Color [$color1] compared to color [$color2] is not within distance $testDistance FAILED.".NL;
}

$layout = "<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td style='text-align: center;'>%s</td>
</tr>"
;

$output .= sprintf(
$layout,
$color1,
$color2,
$distance,
$isSimilar ? 'yes' : 'no'
);
}

$output .= "</tbody></table>";

return
$output;

?>

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top