Работа с библиотеката GD

За да проверите версията на вашата GD библиотека, може да ползвате следния скрипт:
<?php
$infoGD = gd_info ();

foreach ($infoGD as $key => $value) {
    echo "$key => $value" . "<br>";
}
?>
GDversion.png

Какво можем да правим с тази библиотека? Можем да отваряме, съхраняваме и чертаем изображения върху работно платно (canvas) в различни файлови формати - GIF, PNG, JPEG, WBMP и XPM. С exif extension можем да работим с информацията, съдържаща се в хедърите на JPEG и TIFF изображения. Можем да намалим и увеличим размера на изображение. Можем да добавяме воден знак върху снимка и т.н.
Ще разгледам следния случай:
Моделът Audi RS6 Avant тръгва от точка А и за 3,9 s достига скорост 100 km/h (≈28 m/s). Да се определят:
  1. Вида на движението.
    Движението на автомобила е равноускорително без начална скорост (тръгва от място).
  2. Ускорението, с което се е движил автомобилът.
    За да определим ускорението, ще приложим закона за скоростта при равноускорително движение без начална скорост:

    v = vo + a*t
    28 = 0 + a*3,9
    a = 28 : 3,9
    a = 7,18 m/s2
  3. Да се начертае графика на изменението на скоростта на автомобила с времето.
    Графиката на промяната на скоростта с времето, начертана с LibreOffice, ще изглежда така:
Audi-RS6-Avant.png
Моето желание обаче е да изчертая подобна графика с PHP, колкото и безмислено да звучи това за някои особи. :)
За да изчертая графична зависимост между две величини, ми е необходима координатна система. Тъй като ще създавам двумерни изображения, ще работя с декартова (правоъгълна, двумерна) координатна система.
Кои функции от GD библиотеката ще са ми необходими? Ще трябва да създам изображение, да му задам цвят, да начертая хоризонтални и вертикални линии, да изпиша величините по координатните оси. Функциите, които извършват тези дейности са:
Синтаксис на функцията Какво прави?
resource imagecreatetruecolor(int $width, int $height) Създава ново изображение със зададени ширина и височина.
int imagecolorallocate(resource $image , int $red , int $green , int $blue) Задава RGB цветовия модел (за фон на изображението, например).
bool imagefill (resource $image , int $x , int $y , int $color) Запълва изображението с определен цвят, стартирайки от точка с определени координати (долният ляв ъгъл е с координати (0,0)).
bool imageline (resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color) Чертае цветна линия от точка с координати (x1,y1) до точка с координати (x2,y2).
bool imagestring (resource $image , int $font , int $x , int $y , string $string , int $color) Хоризонтално изписва стринг от позиция с определени координати, с определен цвят и шрифт.
bool imagestringup (resource $image , int $font , int $x , int $y , string $string , int $color) Вертикално изписва стринг от позиция с определени координати, с определен цвят и шрифт.
bool imagesetstyle (resource $image , array $style) Задава стил.
bool imagejpeg (resource $image [, mixed $to [, int $quality ]]) Извежда изображението в браузъра.
bool imagedestroy (resource $image) Освобождава паметта, заета от изображението.

На файла, който съдържа скрипта за изчертаване на графиката, съм дала наименование graphic.php. Ето и неговото съдържание:

<?php
//grapfic.php

$width=1000;
$height=600;
$im = imagecreatetruecolor($width,$height);
$gray = imagecolorallocate($im,102,102,102);
$white = imagecolorallocate($im,255,255,255);
$black = imagecolorallocate($im,0,0,0);
$red = imagecolorallocate($im,255,0,0);
imagefill($im,0,0,$white);

$x_ori = 80; 
$y_ori = 60; 
$y_bottom = 60; 
$xlen = $width - $x_ori - $x_ori * 1.5;
$ylen = $height - $y_ori - $y_bottom;   

$font="../NK_Mono.ttf";
$text="Промяна на скоростта на Audi RS6 Avant";
imagettftext($im, 30, 0, $x_ori+80,$y_ori-20, $red, $font, $text);         
imagestring($im,5,$x_ori + $xlen/2 -10,$y_ori + $ylen + 30,"t, s", $red); 
imagestringup($im,5,$x_ori-60,$y_ori + $ylen/2 + 20,"v, m/s", $red);   
                  
$arry = array(30,25,20,15,10,5);
    
    for ($i=0;$i<5;$i++)
    {
        $y = $y_ori + ($arry[$i] - $arry[0]) * $ylen/($arry[5]-$arry[0]);
         
        $style=array($white,$white,$gray,$white,$white);
        imagesetstyle($im,$style);  
        imageline($im,$x_ori,$y,$x_ori + $xlen,$y,IMG_COLOR_STYLED); 
        imagestring($im,2,$x_ori-20,$y-7,number_format($arry[$i]),$black);               
    }

 
imagestring($im,2,$x_ori,$y_ori+490,"0",$black);   
imagestring($im,2,$x_ori+90,$y_ori+490,"0.5",$black);
imagestring($im,2,$x_ori+190,$y_ori+490,"1.0",$black);
imagestring($im,2,$x_ori+290,$y_ori+490,"1.5",$black);
imagestring($im,2,$x_ori+390,$y_ori+490,"2.0",$black);
imagestring($im,2,$x_ori+490,$y_ori+490,"2.5",$black);
imagestring($im,2,$x_ori+590,$y_ori+490,"3.0",$black);
imagestring($im,2,$x_ori+690,$y_ori+490,"3.5",$black);
imagestring($im,2,$x_ori+790,$y_ori+490,"4.0",$black);
     

imageline($im,$x_ori+100,$y_ori-1,$x_ori+100,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+200,$y_ori-1,$x_ori+200,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+300,$y_ori-1,$x_ori+300,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+400,$y_ori-1,$x_ori+400,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+500,$y_ori-1,$x_ori+500,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+600,$y_ori-1,$x_ori+600,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+700,$y_ori-1,$x_ori+700,$y_ori + $ylen,IMG_COLOR_STYLED);  
imageline($im,$x_ori+800,$y_ori-1,$x_ori+800,$y_ori + $ylen,IMG_COLOR_STYLED);  

             
imagearc($im,$x_ori,$y_ori+480,5,5,0,360,$red);
imagearc($im,$x_ori+790,$y_ori+20,5,5,0,360,$red);
imageline($im,$x_ori,$y_ori+480,$x_ori+790,$y_ori+20,$red);

 
imageline($im,$x_ori,$y_ori+$ylen,$x_ori+$xlen,$y_ori+$ylen,$black);  
imageline($im,$x_ori,$y_ori,$x_ori,$y_ori + $ylen,$black);  
imageline($im,$x_ori,$y_ori,$x_ori+$xlen,$y_ori,$black);  
imageline($im,$x_ori+$xlen,$y_ori,$x_ori+$xlen,$y_ori+$ylen,$black);  


header('Content-type: image/jpeg');
$img=imagecreatefromjpeg("audi.jpg");
imagecopy($im, $img, $x_ori+300,$y_ori+60,0,0,148,108);
imagejpeg($im);
imagedestroy($im);
imagedestroy($img);
?>
След изпълнение на скрипта, в браузъра ще видите:

graphic-audi.png

Забележка: За да проработи скриптът, е необходимо да промените редове 19, 71 и 72 и да укажете пътя до файла с изображението, шрифта, който ще ползвате за изписване на текста и съответно размерите на изображението (от ред 19).

Няма коментари:

Публикуване на коментар