Scripts

Wolkenstatus

Met dit script kun je aan de hand van een foto (+- 160 x 100 pixels) een status opmaken van de wolken (lichtbewolkt, helder...) Plaats een foto in een images-map. Het script zet deze foto om in een 4bits kleuren foto (grijs) en berekent het aantal keer dat een bepaalde grijswaarde voorkomt in die foto. Aan de range van die 16 grijswaardes kun je dan zien of het al dan niet bewolkt is.

wolkenstatus
<?php
$img = "images/clouds2.gif";						//foto ophalen
$imgHand = ImageCreateFromGIF($img); 		// handle voor foto
$imgSize = GetImageSize($img); 					// foto grootte
$imgWidth = $imgSize[0]; 								// breedte en hoogte
$imgHeight = $imgSize[1]; 
echo '<img src="'.$img.'"><br><br>';
// foto vergroot weergeven (met tabel)
echo '<table cellspacing=0 cellpadding=0>';
for ($l = 0; $l < $imgHeight; $l++) { 
	echo '<tr>'; 
	for ($c = 0; $c < $imgWidth; $c++) { 
		$pxlCor = ImageColorAt($imgHand,$c,$l); // pixelkleur ophalen
		$pxlCorArr = ImageColorsForIndex($imgHand, $pxlCor);
		// kleuren omzetten naar 16 grijswaarden
			$htmlCor = DecHex($pxlCorArr["red"]&240) . DecHex($pxlCorArr["red"]&240) . DecHex($pxlCorArr["red"]&240);
		// teller bijhouden voor elke grijswaarde
			$grey[convert($htmlCor)/16]++;
		// tabel cell met als kleur de berekende grijswaarde			
			echo '<td bgcolor="#'.$htmlCor.'" width="3px" height="3px"></td>';
	}
	echo '</tr>';
}
echo '</table><br>';

// alle grijswaarden laten zien, van donker naar licht
for ($i=0;$i<16;$i++){
	echo 'grijswaarde '.$i.' : '.$grey[$i].'<br>';
}
echo '<br><br>Status: <b>'.status(count($grey)).'</b><br>';
// functies						
function convert($color){
	$hexdec=HexDec($color)&240; // kleur omzetten naar hexadecimale waarden (4bits)
	$decbin=DecBin($hexdec); // omzetten naar binair
	$decbin = substr("00000000",0,8 - strlen($decbin)) . $decbin; // verloopnullen bijvoegen tot 8bit
	$bindec = BinDec($decbin); // terug omzetten naar decimale waarde
	return $bindec;		// nu hebben we een getal (grijswaarde) tussen 0 en 15
}

// status 
function status($range){
	if ($range >= 13) return "zwaar bewolkt";
	elseif ($range > 9 && $range < 13) return "bewolkt";
	elseif ($range > 4 && $range <=9) return "licht bewolkt";
	elseif ($range <= 4) return "helder";
} 
?>

Reacties

0
Nog geen reacties.