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.