Файл: Графическая библиотека PHP GD.docx

Добавлен: 15.02.2019

Просмотров: 337

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ОБРАЗОВАНИЯ

«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»


Кафедра вычислительной техники









ОТЧЕТ

ПО ЛАБОРАТОРНОЙ РАБОТЕ №7

«Графическая библиотека PHP GD»

ПО ДИСЦИПЛИНЕ «WEB-ПРОГРАММИРОВАНИЕ»











Факультет: АВТФ Преподаватель: Новицкая Ю.В.


Группа: АВТ-412


Студенты:

Евтушенко Никита Сергеевич

Лазаревич Михаил Михайлович








Новосибирск 2017г.


Цель работы:

Получить практические навыки в использовании графической библиотеки PHP GRAPHICS DRAW (GD).

Задание:

Во всех вариантах заданий необходимо разработать PHP-скрипт, использующий возможности графической библиотеки PHP GD. Вариант 6: форма для голосования с выводом результатов в виде столбчатой гистограммы с указанием значений.


Порядок выполнения лабораторной работы:

  1. Для выполнения лабораторной работы установить программный комплекс Denwer.

  2. Написать PHP-скрипт в соответствии с заданным вариантом.

  3. Протестировать созданный PHP-скрипт

html-разметка созданного документа:

index.php

<!DOCTYPE html>

<html lang="ru"><head>

<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, а также его возможности.