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