آموزش توابع GD (قسمت اول)

تیر ۲۵, ۱۳۹۱ توسط : معراج

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

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

<?php
$image = imagecreate(100,60);
?>

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

<?php
$image_1 = imagecreatefromjpeg('../first.jpg');
$image_2 = imagecreatefrompng('../first.png');
$image_3 = imagecreatefromgif('../first.gif');
?>

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

<?php
$background = imagecolorallocate($image,255,255,255);
?>

البته تابع بالا فقط در اولین فراخوانی رنگ پس زمینه رو تعیین میکنه و برای دفعات ۲ و ۳ و … برای انتخاب و برداشتن رنگ ازش استفاده میشه.

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

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

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

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

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

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

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

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

<?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);
?>

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

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

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

<?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($image, 20, $freezone);
imagepng($image);
?>

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

بازدید : ۵۷۰۰

سعید
تیر ۲۶, ۱۳۹۱ @ ۸:۴۵ ق.ظ

مرسی معراج
خیلی خوب بود

پاسخ دادن
تیر ۲۶, ۱۳۹۱ @ ۹:۲۵ ق.ظ

ممنون ! عالی بود.

پاسخ دادن
ایوب سیستم
تیر ۲۷, ۱۳۹۱ @ ۵:۵۴ ق.ظ

سلام . عااااااااااااااالی بود … ممنون

پاسخ دادن
    ایوب سیستم
    تیر ۲۷, ۱۳۹۱ @ ۶:۵۵ ق.ظ

    اگر میشه طرز تهیه واتر مارک نیز هم بنوسید :ایکس

    سپاااااس

    پاسخ دادن
      معراج
      تیر ۲۷, ۱۳۹۱ @ ۹:۰۰ ق.ظ

      سلام!
      در قسمت بعدی حتما نحوه درج واترمارک رو هم توضیح میدم.

      پاسخ دادن
        ایوب سیستم
        تیر ۲۷, ۱۳۹۱ @ ۵:۰۰ ب.ظ

        ممممممممممممممنون :ایکس

        پاسخ دادن
        Mohammad
        مرداد ۱, ۱۳۹۱ @ ۱۱:۳۴ ق.ظ

        salam
        mer30
        pas baghiash chi shod

        پاسخ دادن
مرداد ۱, ۱۳۹۱ @ ۱۰:۴۱ ق.ظ

واقعا عالی بود

پاسخ دادن
  • Pingback: ایران و ایرانی در PHP | PHP Professional

  • Mgh
    آذر ۸, ۱۳۹۳ @ ۵:۰۴ ب.ظ

    سلام خسته نباشید خیلی سایت خوبیه
    لطفا یه اموزش بزارید بدون استفاده از کلاس با توابع خود php خیلی ساده حجم عکس رو پایین بیاریم
    ممنون

    پاسخ دادن
    ٍاغیار
    دی ۳, ۱۳۹۳ @ ۵:۳۰ ب.ظ

    سلام
    ضمن تشکر از مطالب خوبتون
    آیا منبع فارسی سراغ دارید که سایر کتابخانه های پردازش تصویر در PHP (مثل Cairo,Gmagick,Exif و Imagemagick) رو آموزش بده؟

    خیلی ممنون

    پاسخ دادن
      Saeed Moqadam
      دی ۹, ۱۳۹۳ @ ۱۱:۲۱ ب.ظ

      سلام خواهش میکنم
      نه متاسفانه باید گوگل کمک بگیرید

      پاسخ دادن
    mym
    فروردین ۱۴, ۱۳۹۴ @ ۳:۵۴ ب.ظ

    با سلام و خسته نباشید مدیریت
    یک سوال گردش با تابع imagerotate
    رو فرمودین و بسیار عالی و رسا بود
    سوال ( ایا میشه تصویر رو به این تابع قرینه کرد)(اینه)
    اگه میشه لطفا یه توضیح کوچیک بدین

    خیلی خیلی ممنون

    پاسخ دادن
    وحید
    دی ۱۹, ۱۳۹۵ @ ۸:۳۵ ب.ظ

    متشکرم

    پاسخ دادن

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


    *