php - Valeur de couleur de l'image >> 8 & 255 Pourquoi le bit devrait-il être égal à 255 après décalage ?
某草草
某草草 2017-05-16 13:07:44
0
2
568
<?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

某草草
某草草

répondre à tous(2)
伊谢尔伦

(mask & 0xff) 目的在于消除maskEntrez les données d'ordre élevé de plus de 8 chiffres pour vous assurer que le résultat est compris entre 0 et 255

阿神

Si $rgb est 0x111111 你又不 & 255,结果会是 $g = 0x1111 $b=0x111111

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal