Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Kuvan kirkkauden laskeminen/arviointi

kayttaja-2791 [21.09.2006 17:10:16]

#

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);
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta