انجمن عمومی گسترش فناوری آگو
آموزش توابع GD (قسمت اول) - نسخه‌ی قابل چاپ

+- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir)
+-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1)
+--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13)
+--- موضوع: آموزش توابع GD (قسمت اول) (/showthread.php?tid=2323)



آموزش توابع GD (قسمت اول) - agotd - 02-03-2014 03:23 PM

GD یه کتابخونه از PHP هست که به ما در ساخت و حتی ویرایش و اعمال تغییرات روی تصاویر JPG,PNG,GIF کمک میکنه.تو اولین پستم تصمیم گرفتم توابع حرفه ای این کتابخونه رو بهتون معرفی کنم و طرز استفاده از اونا رو توضیح بدم.

در اولین قدم برای ساخت یه تصویر به کمک GD باید از تابع زیر استفاده کنیم که دو تا آرگومان (۱-عرض) و (۲-طول) تصویر رو دریافت میکنه:

کد php:
<?php
$image 
imagecreate(100,60);
?>

و اگر بخوایم روی یه تصویر دیگه تغییری ایجاد کنیم میتونیم از توابع زیر استفاده کنیم که یک آرگومان (۱-مسیر فایل) رو دریافت می کنند:

کد php:
<?php
$image_1 
imagecreatefromjpeg('../first.jpg');
$image_2 imagecreatefrompng('../first.png');
$image_3 imagecreatefromgif('../first.gif');
?>
برای پر کردن پس زمینه یه تصویر از تابع زیر استفاده میشه که چهار آرگومان (۱-تصویر منبع که به کمک یکی از توابع ساخت یا بارگذاری تصویر ایجاد شده)(۲-ترکیب قرمز)(۳-ترکیب سبز)(۴-ترکیب آبی) رو دریافت میکنه:

کد php:
<?php
$background 
imagecolorallocate($image,255,255,255);
?>
البته تابع بالا فقط در اولین فراخوانی رنگ پس زمینه رو تعیین میکنه و برای دفعات ۲ و ۳ و … برای انتخاب و برداشتن رنگ ازش استفاده میشه.

حالا برای مثال میخوایم یه تصویر با پس زمینه سفید ایجاد کنیم که داخل اون با رنگ سیاه “http://phpro.ir” نوشته شده باشه.

از اونجایی که خروجی که در پایان کار میخوایم از مرورگر بگیریم از نوع تصویر هست باید با کمک تابع header نوع خروجی رو به مرورگر اعلام کنیم و بعد یه تصویر با فرمت دلخواه ایجاد میکنیم:


کد php:
<?php
header
("Content-type: image/png");
$image imagecreate(200,60);
$background imagecolorallocate($image,255,255,255);
$textcolor imagecolorallocate($image,0,0,0);
imagestring($image101010'http://phpro.ir'$textcolor);
imagepng($image);
?>

برای درج یه رشته داخل تصویر از تابع imagestring استفاده میکنیم که ۶ آرگومان (۱-تصویر منبع)(۲-اندازه قلم)(۳و۴-محل قرارگیری بالاترین نقطه سمت چپ رشته که تابع از اونجا شروع به درج رشته میکنه)(۵-خود رشته)(۶-رنگ قلم) رو دریافت میکنه.
و در انتها با استفاده از تابع imagepng یا imagegpej و یا imagegif برای ساخت نهایی تصویر و نمایش دادن آن.
چیزی که از اجرای کد بالا خواهید داشت اینه:

[تصویر:  Untitled-1.png]

و اما،این تصویر رو ببینید:

[تصویر:  gd-lib-tut-2.png]

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

برای رسم مستطیل توپر از تابع imagefilledrectangle و برای رسم مستطیل توخالی از تابع imagerectangle استفاده میکنیم که هر دو تابع ۶ آرگومان (۱-تصویر منبع)(۲و۳- بالاترین نقطه سمت چپ مستطیل که تابع از اونجا شروع به رسم مستطیل میکنه)(۴و۵-پایین ترین نقطه سمت راست مستطیل که مستطیل تا اون نقطه کشیده میشه)(۶-رنگ قلم رسم) رو دریافت میکنن.

و برای رسم دایره(یا بیضی) دو تابع imagefilledellipse و imageellipse رو داریم که این دو تابع هم ۶ آرگومان (۱-تصویر منبع)(۲و۳-طول و عرض مرکز دایره)(۴و۵-عرض و ارتفاع دایره)(۶-رنگ قلم رسم) رو دریافت میکنن:

کد php:
<?php
header
("Content-Type: image/gif");
$image imagecreate(200,60);
$background imagecolorallocate($image,255,255,255);
$ellcolor imagecolorallocate($image,0,0,255);
$reccolor imagecolorallocate($image,255,0,0);
imagefilledrectangle($image,10,10,190,50,$reccolor);
imagefilledellipse($image,100,30,180,40,$ellcolor);
imagegif($image);
?>

حالا اینو ببینید:

[تصویر:  gd-lib-tut-3.png]

در واقع این همون تصویر قبلی هست که کمی چرخوندیم و فضاهای خالی که بعد چرخش بوجود اومده رو با رنگ سبز پر کردیم.

برای چرخش تصویر(پادساعتگرد) از تابع imagerotate استفاده میکنیم که ۳ آرگومان (۱-تصویر منبع)(۲-درجه چرخش)(۳-رنگی که فضاهای جدید با اون پر میشه) رو دریافت میکنه.پس برای ساخت تصویر بالا نیاز به یه همچین کدی داریم:

کد php:
<?php
header
("Content-Type: image/png");
$image imagecreate(200,60);
$background imagecolorallocate($image,255,255,255);
$ellcolor imagecolorallocate($image,0,0,255);
$reccolor imagecolorallocate($image,255,0,0);
imagefilledrectangle($image ,  ۱۰ ۱۰ ۱۹۰ ۵۰ ,$reccolor);
imagefilledellipse($image ,  ۱۰۰ ۳۰ ۱۸۰ ۴۰ ,$ellcolor);
$freezone imagecolorallocate($image,0,255,0);
$image imagerotate($image20$freezone);
imagepng($image);
?>

خب فعلا تا همین جا رو داشته باشید تا چند روزه آینده ادامش رو بنویسم.