گرافیک در php با استفاده از کتابخانه GD:

متدهای بسیار فراوانی در این کتابخانه وجود دارد که میتوان با کمک آنها محتوای تصویری ایجاد کرد.که میتوان به کاربردهای مانند موارد زیر اشاره کرد:

چون خروجی این برنامه به صورت تصویر است بهتر است با هدر مناسب شروع کنیم

header ("Content-Type: image/jpeg"); 

اماده سازی پرده نقاشی(convas)

قبل از شروع کار باید صفحه مورد نظر را ایجاد کنیم مثلا با متد ()imagecreate

$img = imagecreate (400, 400);

ایجاد رنگ:

$blue = imagecolordeallocate($img , 0,0,255)

در مثال فوق یک رنگ ابی ایجاد کردیم

آماده سازی پس زمینه:

$bkg_color = imagecolorallocate($image, 255, 255, 255);

در مثال فوق یک پس زمینه سفید ایجاد کردیم

نکته:دقت داشته باشید که برنامه ایجاد تصاویر با متد ()imagecreate شروع شده و با متد ()imagedestroy پایان میابد.

مثال:

<?php
$image = imagecreate(400, 400);
$bkg_color = imagecolorallocate($image, 255, 255, 255);
$width = imagesx($image);
$height = imagesy($image);
$blue = imagecolorallocate($image, 0, 0, 255);
for($i = 0; $i < 10000; $i++) {
    $x = rand(0, $width);
    $y = rand(0, $height);
    imagesetpixel($image, $x, $y, $blue);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

برنامه فوق یک عکس 400 در 200 تولید کرده و در آن ده هزار نقطه تصادفی میگذارد.

متد های ترسیم:

ترسیم یک پیکسل:

imagesetpixel($img, 0, 0, $blue);

در مثال فوق یک پیکسل ابی در نقطه 0 و 0 ایجاد کردیم

ترسیم یک خط:

imageline($image, 0, 0, 400, 400, $blue);

یک خط که از نقطه 0و0 شروع میشود و در 400و400 تمام میشود.

تبدیل استرینگ به عکس:

imagestring($image, 5, 10, 5, "this is test", $blue);

مثال:تبدیل یک متغیر به عکس

if(isset($_GET['text'])) {
    $text = $_GET['text'];
}
if(empty($text)) {
    die();
}
$length = strlen($text);
$fw = 9;
$fh = 15;
$gap = 5;
$width = $fw*$length + 2*$gap;
$height = $fh + 2*$gap;
$image = imagecreate($width, $height);
$bkg_color = imagecolorallocate($image, 255, 255, 255);
$blue = imagecolorallocate($image, 0, 0, 255);
imagestring($image, 5, $gap, $gap, $text, $blue);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

رسم مستطیل:

imagerectangle($image, 50, 100, 400, 300, $blue);

مستطیل توپر

imagefilledrectangle($image, 150, 150, 250, 250, $blue);

رسم بیضی یا دایره:

imageellipse($image, 400, 400, 100, 180, $red);

برعکس کردن آینه کردن و چرخاندن تصویر:

imageflip($image, IMG_FLIP_HORIZONTAL);
imageflip($image, IMG_FLIP_VERTICAL);
imageflip($image, IMG_FLIP_BOTH);
$image = imagerotate($image, -30, $bkg_color);

ایجاد کد کپچا:

<?php
function GenerateCaptchaCode($length = 5) {
    $alphabet = '123456789abcdefghijklmnopqrstuvwxyz';
    return SelectRandomChar($alphabet, $length);
}
function SelectRandomChar($str, $count = 1) {
    $n = strlen($str);
    $out = '';
    for($k = 0; $k < $count; $k++) {
        $i = rand(0, $n - 1);
        $out .= substr($str, $i, 1);
    }
    return $out;
}
$image = imagecreate(150, 45);
$bkg_color = imagecolorallocate($image, 255, 255, 255);

$blue = imagecolorallocate($image, 50, 160, 255);
$red = imagecolorallocate($image, 255, 80, 150);
$green = imagecolorallocate($image, 200, 255, 200);

imagefilledellipse($image, rand(10, 140), rand(10, 35), 30, 30, $blue);
imagefilledellipse($image, rand(10, 140), rand(10, 35), 30, 30, $red);
imagefilledellipse($image, rand(10, 140), rand(10, 35), 30, 30, $green);

$black = imagecolorallocate($image, 0, 0, 0);
$text = GenerateCaptchaCode();
$x = 20;
$y = 10;
for($i = 0; $i < strlen($text); $i++) {
    $char = substr($text, $i, 1);
    imagestring($image, 5, $x, $y, $char, $black);
    $x += rand(15, 30);
    $y = rand(10, 20);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

مثال2:

<?php
session_start();


$vr = "qwertyuiopasdfghj123456789klmnbvcxz";
for($i = 1;$i <= 6; $i++){
	$rcode .= $vr[rand(0,strlen($vr))];
}

$_SESSION['code'] = $rcode;
$img = imagecreate(180,110);
$colors = array();
for($i = 0;$i <= 10; $i++){
	$colors[$i] = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));	
}
$black = imagecolorallocate($img,0,0,0);

for($i = 0;$i <= 5; $i++){
	$xstart = rand(0,10) * 10;
	$xend = $xstart +10;
	imagefilledrectangle($img,0,$xstart,200,$xend,$colors[rand(1,9)]);
}
imagefttext($img,36,rand(1,30),20,90,$black,'Tahoma.ttf',$rcode);
for($i = 0;$i <= 5; $i++){imageline($img,rand(0,200),rand(0,100),rand(0,200),rand(0,100),$colors[rand(1,9)]);
	
}
imagejpeg($img);
?>