Funktio palauttaa 24bit RGB kuvaresurssista kuvan kirkkauden. Palautusskaalassa 0 on täysin musta, 100 on valkoinen. iAcc-muuttujalla voi parantaa/löyhentää tarkkuutta. Tarkuutta voi säätää, välillä 1 - 100, missä 100 on tarkin (mikä ei välttämättä isoissa kuvissa kuitenkaan palauta absoluuttisesti oikeaa). Koodi on kommentoitu melkoisen tyhjentävästi (ja melkoisen helppohan tämä oli muutenkin tehdä), joten eipä siitä sen enempää.
<?php function calc_img_bright($rKuva, $iAcc = 80) { $iKuvan_leveys = imagesx($rKuva); $iKuvan_korkeus = imagesy($rKuva); //Tarkistetaan että iAcc on oikealla välillä //Tämä on ternary-vertailu/sijoitus, ihan näin huomiona, kun ei ole hirveän yleinen $iAcc = $iAcc >= 1 ? $iAcc : 1; $iAcc = $iAcc <= 100 ? $iAcc : 100; $iKuvan_pienin_sivu = $iKuvan_korkeus > $iKuvan_leveys ? $iKuvan_leveys : $iKuvan_korkeus; //Lasketaan että monenko välein näytteitä otetaan, methodi on aika hämärä, mutta isoilla arvoilla pitäisi päästä kyllä erittäin lähelle absoluuttisesti oikeaa arvoa $iStep = ceil($iKuvan_pienin_sivu * 1 / ($iAcc * 5)); //Kuvan rivit lävitse for ($y = 0; $y + $iStep < $iKuvan_korkeus; $y = $y + $iStep) { //Kuvan sarakkeet lävitse for ($x = 0; $x + $iStep < $iKuvan_leveys; $x = $x + $iStep) { //Haetaan väri $iRgb = @imagecolorat($rKuva, $x, $y); //Hakee väristä red-, green- ja blue-komponentit, laskee ne yhteen, ja laittaa taulukkoon $iBrightSum += (($iRgb >> 16) & 0xFF) + (($iRgb >> 8) & 0xFF) + ($iRgb & 0xFF); $iSamples++; } } //Normalisoidaan ensin, sitten lasketaan vain keskiarvo, summa / otteiden määrä return (100/765) * ($iBrightSum / $iSamples); } echo calc_img_bright(imagecreatefromjpeg("image.jpg"), 70); ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.