ВУЗ: Новосибирский государственный технический университет
Категория: Решение задач
Дисциплина: Программирование
Добавлен: 15.02.2019
Просмотров: 337
Скачиваний: 7
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра вычислительной техники
ОТЧЕТ
ПО ЛАБОРАТОРНОЙ РАБОТЕ №7
«Графическая библиотека PHP GD»
ПО ДИСЦИПЛИНЕ «WEB-ПРОГРАММИРОВАНИЕ»
Факультет: АВТФ Преподаватель: Новицкая Ю.В.
Группа: АВТ-412
Студенты:
Евтушенко Никита Сергеевич
Лазаревич Михаил Михайлович
Новосибирск 2017г.
Цель работы:
Получить практические навыки в использовании графической библиотеки PHP GRAPHICS DRAW (GD).
Задание:
Во всех вариантах заданий необходимо разработать PHP-скрипт, использующий возможности графической библиотеки PHP GD. Вариант 6: форма для голосования с выводом результатов в виде столбчатой гистограммы с указанием значений.
Порядок выполнения лабораторной работы:
-
Для выполнения лабораторной работы установить программный комплекс Denwer.
-
Написать PHP-скрипт в соответствии с заданным вариантом.
-
Протестировать созданный PHP-скрипт
html-разметка созданного документа:
index.php
<!DOCTYPE html>
<meta charset="utf-8">
<title>Выборы 2К18</title>
<script language="javascript" src="js/main.js"></script>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body onunload="">
<div id="header"><h1 align="center">Выборы.</h1></div>
<div id="main">
<form id="form_block" autocomplete="off" action="connection.php" method="GET">
<div id="buttn-div">
<input id="subm" type="submit" value="Подтвердить выбор">
</div>
<input name="variant" value="-1" checked type="radio" hidden="true">
<div class="block">
<div class="subblock">
<div style="display:table-row;width 100%;"><div class="cand_name"><div style="overflow:hidden;height:40px">Царь-царевич</div></div></div>
<div class="emptydiv1"></div>
<div style="display:table-row;width 100%; "><div class="imgdiv"><div class="dummy"><img src="img/King1.png"></div></div></div>
<div class="emptydiv2"></div>
<div class="info"><div class="infocontent">
</div>
</div>
</div>
<div class="emptydiv3"></div>
<div class="div-ctrl" >
<input name="variant" value="0" class="radio" id="0" style="display: none;" type="radio"><label for="0" class="control radio-ctrl" style="/*! height: auto; */background-color: #fff;display: block;/*! width: calc(100%-4px); *//*! float: left; */border-radius: 8px;/*! border: 2px solid black; *//*! margin: auto; *//*! box-sizing: border-box; */box-shadow: inset 0px 0px 0px 2px #000;"><span style="padding-left: 5px;height: 40px;display: block;/*! vertical-align: middle; */overflow-x: hidden;/*! table-layout: fixed; */align-items: center;line-height: 40px;overflow-y: hidden;padding-right: 5px;/*! float: left; */"></span></label>
</div>
</div>
<div class="block">
<div class="subblock">
<div style="display:table-row;width 100%;"><div class="cand_name"><div style="overflow:hidden;height:40px">Король-королевич</div></div></div>
<div class="emptydiv1"></div>
<div style="display:table-row;width 100%;"><div class="imgdiv"><div class="dummy"><img src="img/King2.png"></div></div></div>
<div class="emptydiv2"></div>
<div class="info"><div class="infocontent">
</div>
</div>
</div>
<div class="emptydiv3"></div>
<div class="div-ctrl" >
<input name="variant" value="1" class="radio" id="1" style="display: none;" type="radio"><label for="1" class="control radio-ctrl" style="/*! height: auto; */background-color: #fff;display: block;/*! width: calc(100%-4px); *//*! float: left; */border-radius: 8px;/*! border: 2px solid black; *//*! margin: auto; *//*! box-sizing: border-box; */box-shadow: inset 0px 0px 0px 2px #000;"><span style="padding-left: 5px;height: 40px;display: block;/*! vertical-align: middle; */overflow-x: hidden;/*! table-layout: fixed; */align-items: center;line-height: 40px;overflow-y: hidden;padding-right: 5px;/*! float: left; */"></span></label>
</div>
</div>
<div class="block">
<div class="subblock">
<div style="display:table-row;width 100%;"><div class="cand_name"><div style="overflow:hidden;height:40px">Сапожник-портной</div></div></div>
<div class="emptydiv1"></div>
<div style="display:table-row;width 100%;"><div class="imgdiv"><div class="dummy"><img src="img/King3.png"></div></div></div>
<div class="emptydiv2"></div>
<div class="info"><div class="infocontent">
</div>
</div>
</div>
<div class="emptydiv3"></div>
<div class="div-ctrl" >
<input name="variant" value="2" class="radio" id="2" style="display: none;" type="radio"><label for="2" class="control radio-ctrl" style="/*! height: auto; */background-color: #fff;display: block;/*! width: calc(100%-4px); *//*! float: left; */border-radius: 8px;/*! border: 2px solid black; *//*! margin: auto; *//*! box-sizing: border-box; */box-shadow: inset 0px 0px 0px 2px #000;"><span style="padding-left: 5px;height: 40px;display: block;/*! vertical-align: middle; */overflow-x: hidden;/*! table-layout: fixed; */align-items: center;line-height: 40px;overflow-y: hidden;padding-right: 5px;/*! float: left; */"></span></label>
</div>
</div>
<div class="block">
<div class="subblock">
<div style="display:table-row;width 100%;"><div class="cand_name"><div style="overflow:hidden;height:40px">Какая разница</div></div></div>
<div class="emptydiv1"></div>
<div style="display:table-row;width 100%;"><div class="imgdiv"><div class="dummy"><img src="img/King4.png"></div></div></div>
<div class="emptydiv2"></div>
<div class="info"><div class="infocontent">
</div>
</div>
</div>
<div class="emptydiv3"></div>
<div class="div-ctrl" >
<input name="variant" value="3" class="radio" id="3" style="display: none;" type="radio"><label for="3" class="control radio-ctrl" style="/*! height: auto; */background-color: #fff;display: block;/*! width: calc(100%-4px); *//*! float: left; */border-radius: 8px;/*! border: 2px solid black; *//*! margin: auto; *//*! box-sizing: border-box; */box-shadow: inset 0px 0px 0px 2px #000;"><span style="padding-left: 5px;height: 40px;display: block;/*! vertical-align: middle; */overflow-x: hidden;/*! table-layout: fixed; */align-items: center;line-height: 40px;overflow-y: hidden;padding-right: 5px;/*! float: left; */"></span></label>
</div>
</div>
</form>
</div>
</body><style type="text/css"></style></html>
lab7.php
<?php error_reporting(E_ALL);
$diagramm_margin_left=20;
$diagramm_margin_right=20;
$diagramm_margin_top=20;
$diagramm_margin_bottom=200;
$y_divs=5;
$rect_margin_left=5;
$rect_margin_right=5;
$size_x=512;
$size_y=512;
$image=imagecreatetruecolor($size_x,$size_y);
$colorpallete[0]=imagecolorallocate($image,56, 102, 175);//blue
$colorpallete[1]=imagecolorallocate($image,59,198,184);//cyan?
$colorpallete[2]=imagecolorallocate($image,59,198,94);//green
$colorpallete[3]=imagecolorallocate($image,187, 59, 198);
$colorpallete[4]=imagecolorallocate($image,198, 59, 86);
$colorpallete[5]=imagecolorallocate($image,228, 232, 16);
$colorpallete[6]=imagecolorallocate($image,239, 96, 14);
$candcount=4;
$number=$_REQUEST['variant'];
//$number=3;
//load values
$fp = fopen('file.csv', 'c+');
flock($fp,LOCK_EX);
$candidates=fgetcsv($fp);
//print_r($candidates);
if(count($candidates)==$candcount){
foreach ($candidates as &$val) {
//var_dump($val);
if(filter_var($val, FILTER_VALIDATE_INT)==false&&!(filter_var($val, FILTER_VALIDATE_INT) === 0))
{
$candidates=array_fill(0,$candcount,0);
break;
}
$val=intval($val);
}
}else
{
$candidates=array_fill(0,$candcount,0);
}
$candidates[$number]++;
ftruncate ( $fp , 0);
fseek($fp,0);
fputcsv($fp,$candidates);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);
$col=imagecolorallocate($image,255,255,255);
ImageFilledRectangle($image,0,0,$size_x-1,$size_y-1,$col);
$candidates_count=count($candidates);
$max=max($candidates);
$y_marks=min(5,max(1,$max));
$dx=($size_x-$diagramm_margin_left-$diagramm_margin_right)/$candidates_count;
$dy=($size_y-$diagramm_margin_bottom-$diagramm_margin_top)/$y_marks;
$filename[0]="img/King1.png";
$filename[1]="img/King2.png";
$filename[2]="img/King3.png";
$filename[3]="img/King4.png";
for($counter=0;$counter<4;$counter++)
{$files[$counter]=imagecreatefrompng($filename[$counter]);
if(!$files[$counter])
{
/* Создаем пустое изображение */
$files[$counter] = imagecreatetruecolor(150, 150);
$tc = imagecolorallocate($im, 0, 0, 0);
/* Выводим сообщение об ошибке */
imagestring($files[$counter], 1, 5, 5, 'Ошибка загрузки ' . $filename[$counter], $tc);
}
}
//draw ox oy
//draw labels
$x=2;
$y=$diagramm_margin_bottom;
for($counter=0;$counter<=$y_marks;$counter++)
{
ImageStringUp($image,3,$x,$size_y-1-$y+10,number_format($counter*$max/$y_marks,1,".",""),0x000000);
ImageLine($image,$diagramm_margin_left,$size_y-1-$y,$size_x-$diagramm_margin_right,$size_y-1-$y,0x000000);
$y+=$dy;
}
//draw rects
$x=$diagramm_margin_left;
$y=$diagramm_margin_bottom;
for ($counter=0;$counter<$candidates_count;$counter++)
{
ImageFilledRectangle($image,$x+$rect_margin_right,$size_y-1-$y,$x+$dx-$rect_margin_left,$size_y-1-($y+($dy*$y_marks*$candidates[$counter])/$max),$colorpallete[$counter]);
$x+=$dx;
}
imagesetthickness($image, 1);
ImageLine($image, $diagramm_margin_left, $size_y-1-$diagramm_margin_bottom, $size_x-$diagramm_margin_right-1, $size_y-1-$diagramm_margin_bottom, 0x00000);
ImageLine($image, $diagramm_margin_left, $size_y-1-$diagramm_margin_bottom, $diagramm_margin_left, $diagramm_margin_top, 0x000000);
$x=$diagramm_margin_left;
$y=intval($diagramm_margin_bottom*0.1);
$ymax=$diagramm_margin_bottom-2*$y;
$dx=$size_x-$diagramm_margin_left-$diagramm_margin_right;
$dx=$dx/$candidates_count;
for($counter=0;$counter<$candidates_count;$counter++)
{
imagerectangle($image, $x+2, $size_y-1-$y, $x+$dx-2, $size_y-1-$ymax, $colorpallete[$counter]);
$width=imagesx($files[$counter]);
$height=imagesy($files[$counter]);
$dsty=$y+1;
$imgyx=0;
$dstwidth=$dx-6;
$dstx=$x+3;
$res=$width/$height;
$dstheight=($dx-6)*$height/$width;
if($dstheight<=($ymax-$y-2))
{
$dsty=($ymax-$y-$dstheight)/2+$y;
}
else
{
$dstheight=($ymax-$y-2);
$dstwidth=($dstheight*$res);
$dstx=($x+3+($dx-$dstwidth)/2);
}
imagecopyresized($image, $files[$counter], $dstx, $size_y-1-$dsty-$dstheight, 0,0, $dstwidth, $dstheight, $width, $height);
$x+=$dx;
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Скриншоты документа:
Выводы по работе:
Были изучены основы работы с PHP GD, а также его возможности.