<?php
/**
imagecolorat — Dapatkan nilai indeks warna piksel
int imagecolorat ( sumber $image , int $x , int $y )
Mengembalikan nilai indeks warna piksel pada kedudukan yang ditentukan dalam grafik yang ditentukan oleh imej.
Jika PHP telah disusun dengan pustaka GD 2.0 atau lebih tinggi dan imej ialah imej truecolor, fungsi ini mengembalikan nilai RGB titik sebagai integer. Gunakan shifting dan masking untuk mendapatkan nilai komponen merah, hijau dan biru:
*/
//echo dechex(255);mati;//ff heksadesimal ff = perpuluhan 255
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);//E_ALL: semua maklumat ralat dan amaran kecuali E_STRICT
//E_STRICT: Mendayakan cadangan PHP untuk pengubahsuaian kod untuk memastikan kesalingoperasian terbaik dan keserasian hadapan kod.
$im = ImageCreateFromPng("images/4.png");
//$rgb = ImageColorAt($im, 100, 100);
//Penjelasan mengenai operasi syif https://my.oschina.net/u/435872/blog/134802,
//Menukar n bit ke kiri bermakna mendarabkan data dengan 2 kepada kuasa ke-n. Mengalihkan n bit ke kanan bermakna membahagikan data dengan 2 kepada kuasa ke-n dan kemudian membulatkannya.
//print_r(decbin($rgb));//$rgb = 15326445 ditukar kepada binari 111010011101110011101101
//echo $rgb >> 16;//233 15326445/2^16 = 233.862991333
//echo decbin($rgb >> 16);//11101001 Alihkan nilai binari $rgb ke kanan sebanyak 16, dan keluarkan bahagian yang berlebihan untuk mendapatkan
//$r = ($rgb >> 16) & 0xFF;
//$g = ($rgb >> 8) & 0xFF;
//$b = $rgb & 0xFF;
purata fungsi($img) {
$w = imejx($img);
$h = imagesy($img);
$r = $g = $b = 0;
untuk($y = 0; $y < $h; $y++) {
untuk($x = 0; $x < $w; $x++) {
//Perwakilan warna dan operasi bit http://www.cnblogs.com/mengdd/p/3254292.html
$rgb = imagecolorat($img, $x, $y);
$r += $rgb >>
$g += $rgb >>
$b += $rgb & 255;
}
}
$pxls = $w * $h;
$r = dechex(bulat($r / $pxls));
$g = dechex(bulat($g / $pxls));
$b = dechex(bulat($b / $pxls));
if(strlen($r) < 2) {
$r = 0 $r;
}
if(strlen($g) < 2) {
$g = 0 .
}
if(strlen($b) < 2) {
$b = 0 .
}
kembalikan "#" $r .
}
print_r(purata($im));
Kod ini
$r += $rgb >>
$g += $rgb >>
$b += $rgb & 255;
Apa yang saya tidak faham ialah mengapa operasi bit dan 255 diperlukan selepas peralihan
(mask & 0xff)
目的在于消除mask
Masukkan data pesanan tinggi lebih daripada 8 digit untuk memastikan keputusan berada dalam julat 0-255Jika $rgb ialah
0x111111
你又不& 255
,结果会是$g = 0x1111
$b=0x111111