PDA

View Full Version : برنامه نویسی گرافیکی در PHP



Pedram77
یک شنبه 09 فروردین 1394, 18:16 عصر
تو این تاپیک قصد دارم برنامه نویسی گرافیکی توی 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
یک شنبه 09 فروردین 1394, 18:31 عصر
اینم سورس 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
دوشنبه 10 فروردین 1394, 00:03 صبح
خیلی ممنون
عالی بود
کاش هرکس اطلاعات خودش رو اینطوری در دسترس میزاشت.
مرسی

Pedram77
دوشنبه 10 فروردین 1394, 17:05 عصر
خیلی ممنون
عالی بود
کاش هرکس اطلاعات خودش رو اینطوری در دسترس میزاشت.
مرسی

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

reza_alie
دوشنبه 10 فروردین 1394, 18:17 عصر
«الزکات العلم نشرهُ»
«زکات علم نشر آن است»
مولا علی (ع)
افرین ای کاش همه به این باور می رسیدند!!!:گریه::گریه::گریه::گر یه::گریه::گریه:

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

reza_alie
یک شنبه 16 فروردین 1394, 18:15 عصر
سلام به این جا یه سری بزن
http://stackoverflow.com/questions/9650572/resize-image-php
http://php.net/manual/en/function.imagecopyresized.php
تشکر=رضایت

olampiad
یک شنبه 16 فروردین 1394, 18:32 عصر
سلام و خسته نباشید به دوستان عزیز
به این کد من ی نگا بندازید.


$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
دوشنبه 17 فروردین 1394, 15:09 عصر
http://php.net/manual/en/function.imagecopyresampled.php