Лабораторная работа №4
В связи с тем, что в основе языка РНР находится язык Си. При отсутствии установленных дополнительных библиотек, базовый набор доступных типов данных сильно ограничен. Однако почти все более сложные типы данных, возможно реализовать с их использованием, так, например, тип данных color, входящий в состав dotnet, можно сымитировать массивом из 3-х чисел (или 4-х, если цвет подразумевает прозрачность)
Примечание: В компьютерной графике, одной из самых популярных цветовых моделей, является RGB/ RGBA, в которых любой цвет обозначается 3/4 числами из диапазона от 0 до 255 (3/4 байта). Первая из этих чисел, отвечает за интенсивность красного цвета. 2-е, зеленого 3- синего, 4 (для RGBA) отвечает за прозрачность. Комбинация из этих чисел, позволяет получить практически любой цвет от белого (255,255,255) до черного (0,0,0)
В качестве холста для рисования в PHP используются переменная, которая хранится в оперативной памяти. Данную переменную можно либо сохранить в качестве файла-изображения на жестком диске сервера, либо вернуть в качестве ответа сервера на запрос клиента. В данном случае изображение не сохранится на жестком диске и будет удалено после завершения скрипта.
Для работы с изображениями на РНР используется библиотека GD. Подробнее о данной библиотеке и ее функциях можно узнать по ссылке http://php.net/manual/ru/ref.image.php
Приведем пример реализации рисования прямоугольника стараясь придерживаться описанной в лабораторных работах по C# структуре на языке РНР.
<?php
abstract class BaseFigure {
public $fill = Array(255,255,0);
public $stroke = Array(0,0,0);
public $value = 0;
public function Draw ($img){}
public $StrokeWidth = 1;
public function getStrokeColor($img) {
return imagecolorallocate ( $img , $this->stroke[0], $this->stroke[1], $this->stroke[2]);
}
public function getFillColor($img) {
return imagecolorallocate ( $img , $this->fill[0], $this->fill[1], $this->fill[2]);
}
}
class Point extends BaseFigure {
public $x;
public $y;
public function __construct ($x=0,$y=0)
{
$this->x=$x;
$this->y=$y;
}
}
class Line extends BaseFigure {
public $start;
public $end;
public function __construct($start, $end)
{
$this->start = $start;
$this->end = $end;
}
public function Draw ($img)
{
imageline ($img, $this->start->x, $this->start->y , $this->end->x, $this->end->y , $this->getStrokeColor($img) );
}
}
class Rectangle extends BaseFigure {
protected $topleft;
public $width;
public $height;
function __construct($topleft, $width, $height)
{
$this->topleft = $topleft;
$this->height = $height;
$this->width = $width;
}
public function Draw ($img)
{
imagefilledrectangle ($img, $this->topleft->x, $this->topleft->y , $this->topleft->x+$this->width, $this->topleft->y+$this->height , $this->getFillColor($img) );
imagerectangle ($img, $this->topleft->x, $this->topleft->y , $this->topleft->x+$this->width, $this->topleft->y+$this->height , $this->getStrokeColor($img) );
}
}
$r = new Rectangle(new Point(50, 50), 250, 100);
$image = imagecreatetruecolor (500 , 500);
imagefill ( $image ,0 , 0 , imagecolorallocate ( $image , 255, 255, 255));
$r->Draw($image);
header('Content-type: image/png');
imagejpeg($image);
imagedestroy($image);
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.