Ik kwam deze code tegen, en snap hem niet
Wie kan mij dit uitleggen?
Hmm, ziet er apart uit. Ben ook wel nieuwsgierig wat het inhoudt.
En tja.. geen idee wat >> en & betekent in die syntax.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
for ( $y = 0; $y < $iHeight; $y++ ) {
for ( $x = 0; $x < $iWidth; $x++ ) {
$P = imageColorAt ( $oImage, $x, $y );
$R = ( $P >> 16 ) & 0xFF;
$G = ( $P >> 8 ) & 0xFF;
$B = ( $P >> 0 ) & 0xFF;
$N = rand ( 0, $G0 ) - $G1;
$R += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$G += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$B += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
imageSetPixel ( $oImage, $x, $y, ( $arrLUT [ $R ] << 16 ) | ( $arrLUT [ $G ] << 8 ) | $arrLUT [ $B ] );
}
}
?>
for ( $y = 0; $y < $iHeight; $y++ ) {
for ( $x = 0; $x < $iWidth; $x++ ) {
$P = imageColorAt ( $oImage, $x, $y );
$R = ( $P >> 16 ) & 0xFF;
$G = ( $P >> 8 ) & 0xFF;
$B = ( $P >> 0 ) & 0xFF;
$N = rand ( 0, $G0 ) - $G1;
$R += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$G += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$B += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
imageSetPixel ( $oImage, $x, $y, ( $arrLUT [ $R ] << 16 ) | ( $arrLUT [ $G ] << 8 ) | $arrLUT [ $B ] );
}
}
?>
maarja ik ken geen PHP dus ik kan verkeerd zitten
bitwise operators. Zie de php handleiding voor meer uitleg.
De operators >> en & zijn Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function DoNoise ( $oImage, $G0, $C0 ) {
$iWidth = imageSX ( $oImage );
$iHeight = imageSY ( $oImage );
for ( $i = 0; $i < 768; $i++ ) {
$arrLUT [ $i ] = $i < 512 ? ( $i < 255 ? 0 : ( $i - 256 ) ) : 255;
}
$G1 = $G0 / 2;
$C1 = $C0 / 2;
for ( $y = 0; $y < $iHeight; $y++ ) {
for ( $x = 0; $x < $iWidth; $x++ ) {
$P = imageColorAt ( $oImage, $x, $y );
$R = ( $P >> 16 ) & 0xFF;
$G = ( $P >> 8 ) & 0xFF;
$B = ( $P >> 0 ) & 0xFF;
$N = rand ( 0, $G0 ) - $G1;
$R += 413 + $N + mt_rand ( 0, $C0 ) - $C1;
$G += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$B += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
imageSetPixel ( $oImage, $x, $y, ( $arrLUT [ $R ] << 16 ) | ( $arrLUT [ $G ] << 8 ) | $arrLUT [ $B ] );
}
}
}
?>
function DoNoise ( $oImage, $G0, $C0 ) {
$iWidth = imageSX ( $oImage );
$iHeight = imageSY ( $oImage );
for ( $i = 0; $i < 768; $i++ ) {
$arrLUT [ $i ] = $i < 512 ? ( $i < 255 ? 0 : ( $i - 256 ) ) : 255;
}
$G1 = $G0 / 2;
$C1 = $C0 / 2;
for ( $y = 0; $y < $iHeight; $y++ ) {
for ( $x = 0; $x < $iWidth; $x++ ) {
$P = imageColorAt ( $oImage, $x, $y );
$R = ( $P >> 16 ) & 0xFF;
$G = ( $P >> 8 ) & 0xFF;
$B = ( $P >> 0 ) & 0xFF;
$N = rand ( 0, $G0 ) - $G1;
$R += 413 + $N + mt_rand ( 0, $C0 ) - $C1;
$G += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
$B += 255 + $N + mt_rand ( 0, $C0 ) - $C1;
imageSetPixel ( $oImage, $x, $y, ( $arrLUT [ $R ] << 16 ) | ( $arrLUT [ $G ] << 8 ) | $arrLUT [ $B ] );
}
}
}
?>
Edit:
Blanche schreef op 27.10.2007 00:05:
Ik heb die inderdaad gezien, maar ik snap hem niet. Kan je hem niet uitleggen?De operators >> en & zijn bitwise operators. Zie de php handleiding voor meer uitleg.
Gewijzigd op 01/01/1970 01:00:00 door Henk
>> Alle bits eentje naar rechts schuiven.
& is AND maar dan op bitniveau.
Er staat aardig wat informatie op php.net over.
http://www.phphulp.nl/php/tutorials/1/243/
Misschien dat die je verder helpt.
Wat het script doet is eigenlijk niets meer dan het zestientallig stelsel (hexadecimaal, van 0 tot F) omzetten in het tientallige stelsel (van 0 tot 9, je kent het waarschijnlijk wel ;) ) Bijvoorbeeld FF is gelijk aan 255. Dat omzetten doet de & operator als ik het goed begrijp. De >> zijn als het ware een soort substr() die ervoor zorgen dat je de eerste 2, de middelste 2 of de laatste 2 karakters te pakken hebt van je hexadecimale waarde. Maar dan niet toegepast op strings, maar op een integer.