# زبان های اسکریپتی > PHP > تاپیک های آموزشی و دنباله دار >  برنامه نویسی گرافیکی در PHP

## Pedram77

تو این تاپیک قصد دارم برنامه نویسی گرافیکی توی PHP رو یاد بدم و اطلاعات کم خودمو با شما ها در میون بذارم.
تصاویر، زبان های بسیار گوناگونی دارند و اطلاعاتی را در اختیار دیگران قرار میدهند و زیبایی خاصی به وبسایت می بخشند. در PHP توابع زیادی برای رسم و دستکاری گرافیکی دارد. این توابع در کتابخانه ای به نام GD قرار دارند. برای استفاده از این کتابخانه مراحل زیر را انجام دهید:

    فایل PHP.ini را باز کنید. (xampp,wamp,easyPHP,...).    دستور extension = php_gd2.dll را در آن پیدا کنید    اگر قبل از آن علامت " ; " قرار داشت آن علامت را بردارید.    فایل را ذخیره کنید و سیستم را ریست کنید (فقط همان نرم افزار)    کتابخانه قابل استفاده است. 


PHP چه فرمت هایی را پشتیبانی میکند؟
کتابخانه GD فرمت های زیر را پشتیبانی میکند.

    Jpeg    PNG    WBMP    GIF 


*ایجاد تصاویر*
اکنون میخواهیم به چگونگی ساخت تصاویر بپردازیم. مراحل ایجاد تصاویر به این صورت است :

    ایجاد بوم نقاشی برای کار کردن روی آن    رسم اشکال یا چاپ متن روی آن    چاپ گرافیک در مرورگر    پاک کردن حافظه با حذف بوم 

حال به جزئیات میپردازیم:

ایجاد بوم نقاشیبرای ساخت تصاویر در PHP باید یک شناسه تصویر ایجاد شود. دو روش برای انجام این کار وجود دارد: 1- ساخت بوم نقاشی جدید 2- استفاده از یک تصویر موجود به عنوان بوم
در روش اول از تابع ImageCreate() استفاده میشود :$im = ImageCreate($width,$height);
پارامتر width عرض بوم و پارامتر height ارتفاع بوم را مشخص میکند (هر دو پیکسل). این تابع شناسه ی بوم را در متغیر $im قرار میدهد.
در روش دوم از توابع زیر استفاده میشود :

    ImageCreateFromJPEG()    ImageCreateFromGIF()    ImageCreateFromPNG() 

مثلا کد زیر یک تصویر JPEG را به عنوان بوم قرار میدهد :
$im = ImageCreateFromJPEG("board.jpg");

*سیستم مختصات تصویر*
همیشه در تصاویر PHP (و اکثر زبان ها) مبدا تصویر یعنی نقطه ی (0,0) در گوشه بالا سمت راست قرار دارد.

ترسیم یا نوشتن متن روی بوم
پس از ایجاد بوم باید رنگی را برای ترسیم انتخاب شود. انتخاب رنگ توسط تابع ImageColorAllocate() انجام میشود که به صورت زیر است:$pen = ImageColorAllocate(canvas,red,green,blue);
پارامتر canvas همان شناسه ی بوم است ($im) سه پارامتر بعدی هم سیستم رنگی rgb است که هر کدام از 0 تا 255 میتواند مقدار دهی شوند. کد زیر یک قلموی قرمز تولید میکند که میتواند در پروژه استفاده شود:$red = ImageColorAllocate($im,255,0,0);

به طور کلی برای رسم هر گونه متن، مربع، دایره، چند ضلعی و... به پارامتر های زیر نیاز است :

    شناسه بوم    مختصات شروع و بعضی اوقات پایان شکل    رنگ ترسیم    برای متن اطلاعات فونت 


*رسم خط (Line)*
برای رسم خط از تابع ImageLine() استفاده میشود که به صورت زیر است:ImageLine($im,x1,y1,x2,y2,color);
پارامتر اول شناسه بوم است. چهار پارامتر بعدی نقطه ی شروع و پایان است و color همان رنگ است که در قسمت بالا گفته شد.($red)
یک نمونه از رسم خط :
$im = ImageCreate(200,150);
$blue = ImageColorAllocate($im,0,0,255);
ImageLine($im,10,10,150,30,$blue);

*رسم دایره (Circle)*
برای رسم خط از تابع ImageArc() استفاده میشود که به صورت زیر است:ImageArc(image,x,y,w,h,start,end,color);
پارامتر اول شناسه بوم است.x و y مختصات مرکز دایره هستند. w و h عرض و ارتفاع دایره هستند که اگر مساوی باشند ما یک دایره خواهیم داشت در غیر این صورت یک بیضی خواهیم داشت.start نقطه ی شروع کمان است و end نقطه پایان کمان (هر دو به درجه) مثال :ImageArc($im,150,65,70,70,0,360,$blue);

*ترسیم چهار گوش (Rectangle)*
برای رسم چهار گوش از تابع ImageRectangle() استفاده میشود :ImageRectangle(image,x1,y1,x2,y2,color);
پارامتر ها روشن هستند و نیاز به توضیح ندارند.

*چاپ گرافیک در مرورگر*
برای نمایش تصویر نهایی در مرورگر دو راه وجود دارد 1- نمایش مستقیم 2- ذخیره در فایل.
برای نمایش تصویر باید آن را به مرورگر اعلام کرد. این کار با تابع header انجام میشود:

    header("content_type : image/jpeg")    header("content_type : image/png")    header("content_type : image/gif") 

بعد از اعلام به مرورگر آمادگی فرستادن تصویر به مرورگر را داریم. برای این کار از توابع زیر استفاده میشود:

    ImagePng(image)    ImageJpeg(image)    ImageGif(image) 

بسته به نوع مورد نظرتان یکی را بنویسید.

روش دوم ذخیره در یک فایل است (روش پیشنهادی من چون من از روش قبل تو مرورگرم جواب نمیگیرم شما امتحان کنید شاید بشه) برای این منظور از توابع قبل (مثل ImageJpeg) استفاده میشود فقط با چند پارامتر بیشتر.ImageJpeg($im,"image.jpg",100);
پارامتر سوم میتواند از 1 تا 100 باشد که به معنای کیفیت فایل است.

*حذف تصویر*
بعد از اتمام کار تصویر باید حذف شود (اختیاری):ImageDestroy($im);

_برای شما دو مثال که خودم نوشتم قرار میدم. اینو بگم که توی فایلها یسری نکات رو استفاده کردم که اینجا نگفتم ولی کاملا واضحه._

امیدوارم تونسته باشم چیزایی که میدونستمو خوب انتقال بدم  :لبخند گشاده!:

----------


## reza_alie

اینم سورس captcha


<?php
 
header("Content-type: image/jpeg");
@session_start();
$char=chr(rand(97,122));
$num=rand(0,9);
$total=$char.=$num;
$md5=md5($total);
$text=substr($md5,0,6);
$_SESSION["captcha"] = $text;
$height = 40;
$width  = 100;
$image = imagecreate($width, $height);
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 0, 0);
$white_color=imagecolorallocate($image,255,255,255  );
$angle=rand(-5,9);
imagettftext($image,20,$angle,7,30,$white,'./impact.ttf',$text);
imageline($image,rand(0,10),rand(0,50),rand(0,100)  ,rand(0,100), $white_color);
imageline($image,rand(0,100),rand(0,100),rand(0,10  0),rand(0,100), $white_color);
imageline($image,rand(0,100),rand(0,9),rand(4,50),  rand(0,100), $white_color);
imagejpeg($image, null,1000);
imagedestroy($image);
 
?>

----------


## olampiad

خیلی ممنون
عالی بود
کاش هرکس اطلاعات خودش رو اینطوری در دسترس میزاشت.
مرسی

----------


## Pedram77

> خیلی ممنون
> عالی بود
> کاش هرکس اطلاعات خودش رو اینطوری در دسترس میزاشت.
> مرسی


«*الزکات العلم نشرهُ*»
«*زکات علم نشر آن است*»
_مولا علی (ع)_

----------


## reza_alie

> «*الزکات العلم نشرهُ*»
> «*زکات علم نشر آن است*»
> _مولا علی (ع)_


افرین ای کاش همه به این باور می رسیدند!!! :گریه:  :گریه:  :گریه:  :گریه:  :گریه:  :گریه:

----------


## olampiad

سلام و خسته نباشید به دوستان عزیز
من میخوام سایز تصاویر رو تغییر بدم.
میخوام طول و عرض تصاویر رو تغییر بدم:
تو اینترنت خیلی سرچ کردم و این تابع رو به دست آوردم.
به این توابع یه نگا بندازید.
آیا برای تغییر سایز تصاویر در پی اچ پی از این تابع استفاده میکنن*؟
میشه تو این زمینه راهنماییم کنین؟
مرسی**
() imagecopyresized


*

----------


## reza_alie

سلام به این جا یه سری بزن
http://stackoverflow.com/questions/9...size-image-php
http://php.net/manual/en/function.imagecopyresized.php
تشکر=رضایت

----------


## olampiad

سلام و خسته نباشید به دوستان عزیز
به این کد من ی نگا بندازید.

$im =imagecreatefromjpeg("t.jpg");
$width = imagesx($im);
$height = imagesy($im);
$x = $width-500;
$y = $height-500;
$im2 = imagecreate($x,$y);
imagecopyresampled($im2,$im,0,0,0,0,$x,$y,$width,$  height);
imagejpeg($im2,"image.jpg",100);

من این کد رو نوشتم ولی تصاویری رو که بیرون میده همش به رنگ آبی درمیان؟
مشکل از کجاست.
این ی نمونه از تصاویری هستش که خروجی گرفتم.
http://s4.picofile.com/file/8180826492/image.jpg

----------


## Pedram77

http://php.net/manual/en/function.im...yresampled.php

----------

