In this modified example from a file of values (meteoclimatic.htm) simple graphics (located in the images directory) with built-in graphics functions PHP , completing the graphics is very fast and versatile.
a link to the complete sample:
meteo.zip
The main script code:
<?php //-------------------------------------------- Lectura de dades del fitxer ---------------------------- //llegim dades de fitxer $myFile = "meteoclimatic.htm"; $fh = fopen($myFile, 'r'); $tamany=filesize($myFile); $theData = fread($fh,$tamany); fclose($fh); //-------------------------------------------- Termometre ---------------------------------------------- //cargamos la imagen desde un archivo jpg $image = imagecreatefrompng('images/termo.png'); $hora=substr( $theData ,strrpos($theData, "*UPD=") + 16, 5); $dia=substr( $theData ,strrpos($theData, "*UPD=") + 5 ,10 ); $temperatura=substr( $theData ,strrpos($theData, "*TMP=") + 5, strrpos($theData, "*WND=")-(strrpos($theData, "*TMP=") + 7)); $minima=substr( $theData ,strrpos($theData, "*DLTM=") + 6, strrpos($theData, "*DHHM=")-(strrpos($theData, "*DLTM=") + 8)); $maxima=substr( $theData ,strrpos($theData, "*DHTM=") + 6, strrpos($theData, "*DLTM=")-(strrpos($theData, "*DHTM=") + 8)); //echo($temperatura); //echo($maxima); //echo($minima); //asignamos los colores que utilizaremos después $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $red = ImageColorAllocate($image, 255, 0, 0); $blue = ImageColorAllocate($image, 0, 0, 255); $gr = ImageColorAllocate($image, 0, 120, 0); //leemos el tamaño de la imagen $width = imagesx($image); $height = imagesy($image); //colocamos el texto termometro imagestring($image, 2, 65, 9, " 40", $black); imagestring($image, 2, 65, 49, " 30", $black); imagestring($image, 2, 65, 89, " 20", $black); imagestring($image, 2, 65, 129, " 10", $black); imagestring($image, 2, 65, 169, " 0", $black); imagestring($image, 2, 65, 209, "-10", $black); //Temperatura //$temperatura= 24.2; //$minima=10.5; //$maxima=30.2; imagestring($image, 3, 30, 235, $temperatura . "", $black); imagestring($image, 1, 10,250, $hora, $gr); imagestring($image, 1, 40, 250, $dia, $gr); $temp=($temperatura+ 10)*4; imagefilledrectangle($image, 41,(216-$temp), 47, 216, $red); //maxima $temp=($maxima+ 10)*4; imageline($image, 8,(216-$temp),37,(216-$temp), $red); imagestring($image, 3,10, (202-$temp), $maxima, $red); //minima $temp=($minima+ 10)*4; imageline($image, 8,(216-$temp),37,(216-$temp), $blue); imagestring($image, 3,10, (217-$temp), $minima, $blue); //definimos el encabezado de acuerdo con el tipo de datos de salida //header("Content-type: image/png"); //generamos la imagen imagepng($image,"termo.png"); //imagepng($image); //liberamos la memoria ocupada por la imagen imagedestroy($image); //-------------------------------------------- Vent ---------------------------------------------- //cargamos la imagen desde un archivo jpg $image = imagecreatefrompng('images/vent.png'); $viento=substr( $theData ,strrpos($theData, "*WND=") + 5, strrpos($theData, "*AZI=")-(strrpos($theData, "*WND=") + 7)); $racha=substr( $theData ,strrpos($theData, "*WRUN=") + 6, strrpos($theData, "*MHTM=")-(strrpos($theData, "*WRUN=") + 8)); $maxracha=substr( $theData ,strrpos($theData, "*DGST=") + 6, strrpos($theData, "*DSUN=")-(strrpos($theData, "*DGST=") + 8)); $direc=substr( $theData ,strrpos($theData, "*AZI=") + 5, strrpos($theData, "*BAR=")-(strrpos($theData, "*AZI=") + 7)); //asignamos los colores que utilizaremos después $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $red = ImageColorAllocate($image, 255, 20, 0); $blue = ImageColorAllocate($image, 0, 0, 180); $green = ImageColorAllocate($image, 0, 180,0); $yelow = ImageColorAllocate($image, 180, 180,0); //leemos el tamaño de la imagen $width = imagesx($image); $height = imagesy($image); //colocamos el texto termometro imagestring($image, 3, 190, 51, $viento, $green); //imagestring($image, 3, 190, 73, $racha, $blue); imagestring($image, 3, 260, 51, $maxracha, $red); imagefilledrectangle($image, 141,31, 141+($maxracha*1.5), 36, $red); //imagefilledrectangle($image, 141,31, 141+($racha*1.5), 36, $blue); imagefilledrectangle($image, 141,31, 141+($viento* 1.5), 36, $green); //imageline($image, 141+$maxracha,31,141+$maxracha,36, $green); imagesetthickness($image, 2); //N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SSO, SW, SO, WSW, OSO, W, O, WNW, ONO, NW, NO, NNW, NNO switch ($direc) { case "N": imageline($image, 67, 66, 67, 66-37, $red); break; case "NNE": imageline($image, 67, 66, 67+(0.38*37), 66-(0.92*37), $red); break; case "NE": imageline($image, 67, 66, 67+(0.71*37), 66-(0.71*37), $red); break; case "ENE": imageline($image, 67, 66, 67+(0.92*37), 66-(0.38*37), $red); break; case "E": imageline($image, 67, 66, 67+37, 66, $red); break; case "ESE": imageline($image, 67, 66, 67+(0.92*37), 66+(0.38*37), $red); break; case "SE": imageline($image, 67, 66, 67+(0.71*37), 66+(0.71*37), $red); break; case "SSE": imageline($image, 67, 66, 67+(0.38*37), 66+(0.92*37), $red); break; case "S": imageline($image, 67, 66, 67, 66+37, $red); break; case "SSW": imageline($image, 67, 66, 67-(0.38*37), 66+(0.92*37), $red); break; case "SW": imageline($image, 67, 66, 67-(0.71*37), 66+(0.71*37), $red); break; case "WSW": imageline($image, 67, 66, 67-(0.92*37), 66+(0.38*37), $red); break; case "W": imageline($image, 67, 66, 67-37, 66, $red); break; case "WNW": imageline($image, 67, 66, 67-(0.92*37), 66-(0.38*37), $red); break; case "NWW": imageline($image, 67, 66, 67-(0.92*37), 66-(0.38*37), $red); break; case "WNW": imageline($image, 67, 66, 67-(0.92*37), 66-(0.38*37), $red); break; case "NW": imageline($image, 67, 66, 67-(0.71*37), 66-(0.71*37), $red); break; case "NNW": imageline($image, 67, 66, 67-(0.38*37), 66-(0.92*37), $red); break; } if ($viento < 2) { imagestring($image, 3, 141, 126, "Calma", $black); } elseif ($viento <6) { imagestring($image, 3, 141, 126, "Ventolina", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); } elseif ($viento<12) { imagestring($image, 3, 141, 126, "Brisa molt debil", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); } elseif ($viento<20) { imagestring($image, 3, 141, 126, "Brisa debil", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); } elseif ($viento<30) { imagestring($image, 3, 141, 126, "Brisa Moderada", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); imagefilledrectangle($image, 174,104, 182, 112, $green); } elseif ($viento<40) { imagestring($image, 3, 141, 126, "Brisa fresca", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); imagefilledrectangle($image, 174,104, 182, 112, $green); imagefilledrectangle($image, 185,104, 193, 112, $yelow); } elseif ($viento<50) { imagestring($image, 3, 141, 126, "Brisa forta", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); imagefilledrectangle($image, 174,104, 182, 112, $green); imagefilledrectangle($image, 185,104, 193, 112, $yelow); imagefilledrectangle($image, 196,104, 204, 112, $yelow); } elseif ($viento<60) { imagestring($image, 3, 141, 126, "Vent fort", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); imagefilledrectangle($image, 174,104, 182, 112, $green); imagefilledrectangle($image, 185,104, 193, 112, $yelow); imagefilledrectangle($image, 196,104, 204, 112, $yelow); imagefilledrectangle($image, 207,104, 215, 112, $red); } elseif ($viento<74) { imagestring($image, 3, 141, 126, "Vent Dur", $black); imagefilledrectangle($image, 141,104, 149, 112, $green); imagefilledrectangle($image, 152,104, 160, 112, $green); imagefilledrectangle($image, 163,104, 171, 112, $green); imagefilledrectangle($image, 174,104, 182, 112, $green); imagefilledrectangle($image, 185,104, 193, 112, $yelow); imagefilledrectangle($image, 196,104, 204, 112, $yelow); imagefilledrectangle($image, 207,104, 215, 112, $red); imagefilledrectangle($image, 218,104, 226, 112, $red); } imagepng($image,"vent.png"); //imagepng($image); //liberamos la memoria ocupada por la imagen imagedestroy($image); //-------------------------------------------- Humitat,Pressio, hora ---------------------------------------------- //cargamos la imagen desde un archivo jpg $image = imagecreatefrompng('images/Humitat.png'); $hora=substr( $theData ,strrpos($theData, "*UPD=") + 16, 5); $dia=substr( $theData ,strrpos($theData, "*UPD=") + 5 ,10 ); $pluja=substr( $theData ,strrpos($theData, "*DPCP=") + 6, strrpos($theData, "*WRUN=")-(strrpos($theData, "*DPCP=") + 8)); $humitat=substr( $theData ,strrpos($theData, "*HUM=") + 5, strrpos($theData, "*SUN=")-(strrpos($theData, "*HUM=") + 7)); $pressio=substr( $theData ,strrpos($theData, "*BAR=") + 5, strrpos($theData, "*HUM=")-(strrpos($theData, "*BAR=") + 7)); //asignamos los colores que utilizaremos después $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $red = ImageColorAllocate($image, 255, 20, 0); $blue = ImageColorAllocate($image, 0, 0, 180); $green = ImageColorAllocate($image, 0, 180,0); $yelow = ImageColorAllocate($image, 180, 180,0); //leemos el tamaño de la imagen $width = imagesx($image); $height = imagesy($image); //colocamos el texto dia hora $p=$pluja . " mm"; imagestring($image, 3, 30,12, $hora, $black); imagestring($image, 3, 13, 33, $dia, $black); //colocamos el texto lluvia if ($pluja!=" ") { imagestring($image, 3, 50, 80, $p , $blue); imagefilledrectangle($image, 101,137, 111, 138-$pluja, $blue); }else { imagestring($image, 3, 50, 80, "0 mm" , $blue); } //colocamos el texto humedad imagestring($image, 3, 160+$humitat-20, 45, $humitat . "%" , $black); imageline($image, 160+$humitat, 18, 160+$humitat, 35, $red); //colocamos el texto pression imagestring($image, 3, 180, 100, $pressio . "mb" , $black); imageline($image, 155+(($pressio-960)*1.3),73,155+(($pressio-960)*1.3),84, $red); imagepng($image,"humitat.png"); //imagepng($image); //liberamos la memoria ocupada por la imagen imagedestroy($image); ?>
Results: