<?php
/**
imagecolorat — Récupère la valeur de l'indice de couleur d'un pixel
int imagecolorat ( ressource $image , int $x , int $y )
Renvoie la valeur d'index de couleur du pixel à la position spécifiée dans le graphique spécifié par image.
Si PHP a été compilé avec la bibliothèque GD 2.0 ou supérieure et que l'image est une image TrueColor, cette fonction renvoie la valeur RVB du point sous forme d'entier. Utilisez le décalage et le masquage pour obtenir les valeurs des composants rouge, vert et bleu :
*/
//echo dechex(255);die;//ff hexadécimal ff = décimal 255
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);//E_ALL : toutes les informations sur les erreurs et les avertissements sauf E_STRICT
//E_STRICT : active les suggestions de PHP pour les modifications du code afin de garantir la meilleure interopérabilité et la compatibilité ascendante du code.
$im = ImageCreateFromPng("images/4.png");
//$rgb = ImageColorAt($im, 100, 100);
//Explication sur le fonctionnement des équipes https://my.oschina.net/u/435872/blog/134802,
//Décaler n bits vers la gauche signifie multiplier les données par 2 à la nième puissance. Décaler n bits vers la droite signifie diviser les données par 2 à la nième puissance puis les arrondir.
//print_r(decbin($rgb));//$rgb = 15326445 converti en binaire 111010011101110011101101
//écho $rvb >> 16;//233 15326445/2^16 = 233,862991333
//echo decbin($rgb >> 16);//11101001 Décalez la valeur binaire de $rgb vers la droite de 16, et supprimez la partie excédentaire pour obtenir
//$r = ($rgb >> 16) & 0xFF;
//$g = ($rgb >> 8) & 0xFF;
//$b = $rvb & 0xFF;
fonction moyenne ($ img) {
$w = imagesx($img);
$h = imagesy($img);
$r = $g = $b = 0 ;
pour($y = 0; $y < $h; $y++) {
pour($x = 0; $x < $w; $x++) {
//Représentation des couleurs et opérations sur les bits http://www.cnblogs.com/mengdd/p/3254292.html
$rgb = imagecolorat($img, $x, $y);
$r += $rvb>>
$g += $rvb >>
$b += $rvb & 255 ;
}
}
$pxls = $w * $h;
$r = dechex(rond($r / $pxls));
$g = dechex(rond($g / $pxls));
$b = dechex(rond($b / $pxls));
si(strlen($r) < 2) {
$r = 0 .
}
si(strlen($g) < 2) {
$g = 0 $g;
}
si(strlen($b) < 2) {
$b = 0 $b;
}
renvoie "#" .
}
print_r(moyenne($im));
Ce code
$r += $rgb >>
$g += $rvb >>
$b += $rvb & 255 ;
Ce que je ne comprends pas, c'est pourquoi les opérations bit et 255 sont nécessaires après le quart de travail
(mask & 0xff)
目的在于消除mask
Entrez les données d'ordre élevé de plus de 8 chiffres pour vous assurer que le résultat est compris entre 0 et 255Si $rgb est
0x111111
你又不& 255
,结果会是$g = 0x1111
$b=0x111111