در این نوشته و با کمک مفاهیم شی گرایی و تابع های کتابخانه GD در پی اچ پی، می خواهیم آنچه که تا به اینجا آموزش داده ایم را بررسی کنیم. چون کد کلاس طولانی است، پس در دنباله با تصویرهایی از بخش های گوناگون کلاس، کد را آموزش داده ایم و در پایان، کدهای این نوشته را آورده ایم. نام کلاس Imagin است و از اینجا برداشته شده است. کلاس دارای ۶ متد به نام های زیر است.

  • ()setImage که نام و مسیر یک فایل را از ورودی می گیرد و سپس آن را درون برنامه به کار می برد.
  • ()setSize: بیشترین اندازه را برای تصویر دریافت می کند. ورودی آن یک شماره برابر با اندازه (Size) برای تصویر است که به گونه پیش فرض برابر با ۱۰۰ نوشته شده است.
  • ()saveImage: با دریافت مسیر (Path) یک تصویر آن را درون سیستم فایل نگهداری می کند.
  • ()getWidth و ()getHeigth: که پهنا و بلندا (ارتفاع) تصویر را برمی گردانند.
  • ()clearCache: که تابع ()imagedestroy در آن فراخوانی می شود.

ویژگی های کلاس

در کد زیر می بینید که کلاس Imagin دارای ۱۰ ویژگی که همگی به گونه Private (خصوصی یا پنهانی) شناسانده (تعریف) شده اند. در پیوند زیر درباره ویزگی های همگانی (Public) و پنهانی (Private) در پی اچ پی گفته شده است. هر هموند (عضوی) از کلاس که به گونه private باشد، پس تنها درون خود آن کلاس دیده می شود و در دسترس است.

متد ()setImage

این متد یک ورودی برابر با نام و مسیر فایل تصویر را دریافت می کند و سپس در خط دوم از کد می خواهیم پسوند فایل را برداریم. برای این، تابع درونی ()pathinfo از پی اچ پی را به کار برده ایم. سپس برای آنکه همه حرف های رشته نام پسوند بدست آمده به حرف بزرگ تبدیل شوند، مقدار برگشتی تابع ()pathinfo را با تابع ()strtoupper به حرف بزرگ تبدیل می کنیم. در پایان پسوند حرف بزرگ درون متغیر ext$ نگهداری می شود. توجه کنید این متغیر از ویژگی های private نیست و تنها درون خود این متد از کلاس در دسترس و شناخته شده است. در پایان دو ویژگی دیگر به نام های x_input$ و y_input$ مقدار دهی می شوند که پهنا و بلندا (ارتفاع) تصویر ورودی هستند.

سپس در شرط های if  نخست بررسی می شود که ایا تصویر فرستاده شده به متد ()setImage یک فایل است، برای این کار تابع درونی ()is_file را به کار برده ایم. همچنین در هر شرط if بررسی می شود که پسوند بدست آمده در متغیر ext$ از کدام گونه است. برای نمونه از پسوند بدست آمده JPG یا JPEG باشد، پس نخست ویژگی format با مقدار متغیر ext$ مقداردهی می شود، سپس فایل تصویر ورودی با متد ()imagecreatefromjpeg خوانده شده و برگشتی آن در ویژگی img_input$ نگهداری می شود و در پایان ویژگی img_src$ با نام و مسیر تصویر ورودی مقداردهی می شود. توجه کنید نام و مسیر ورودی در متد ()setImage با تک آرگومان آن، یعنی img$ در دسترس است. کد زیر همه متد ()setImage را نشان می دهد.

متد ()setSize

در این متد هیچ تابعی از پی اچ پی برای دسترسی تصویر انجام نمی شود، بلکه تنها چندین ويزگی دیگر از کلاس مقداردهی می شوند. پیش از ویژگی های x_input$ و y_input$ در متد ()setImage مقداردهی شده اند. در این متد در خط ۵ بررسی می شود که آیا مقدار کنونی این دو ویژگی برای هر دو بیشتر از اندازه آرگومان ورودی size$ است؟

در خط ۹ و ۱۸ شرط if..else نخست بررسی می کند که آیا اندازه پهنای تصویر ورودی (x_input$) بیشتر از بلندا (یارتفاع) تصویر ورودی (y_input$) است یا نه؟ اگر اینگونه باشد، پس کدهای ۱۲ و ۱۳ وگرنه کدهای ۲۱ و ۲۲ انجام می شوند. سپس در کد ۲۷ ویژگی resize برابر با مقدار TRUE می شود که شکل ورودی کاندید تغییر اندازه است. اگر شرط خط ۹ درست نباشد، پس نیازی نیست که تصویر ورودی تغییر اندازه داده شود، پس مقدار ویژگی resize برابر با FALSE می شود.

متد ()saveImage

این متد یک مسیر را در ورودی دریافت می کند و سپس تصویر را بر روی دیسک و در آن مسیر دریافتی کپی می کند. نخست بررسی می شود که آیا ویژگی resize برابر با TRUE است؟ اگر باشد، پس باید یک کپی از تصویر با انجام تغییر اندازه بدست آید. کدهای ۶ و ۷ زیر همان مفهومی را دارد که در نوشته پیشین گفتیم. در آنجا تصویر مقصد به اندازه مقدار متغیر percent$ تغییر اندازه می شد، در اینجا بر اساس ویژگی های x_output$ و y_output$ تغییر اندازه می شود که پیش از این بدست آمده بودند.

سپس بر اساس در چندین شرط if بررسی می شود که فرمت (مقدار ویژگی format) چیست و بر اساس آن سپس بررسی می شود که آیا ویژگی resize برابر با TRUE است، اگر اینگونه باشد، پس پایه فرمت، یکی از تابع های ()imageXXX فراخوانی می شود که XXX همان فرمت فایل است. آرگومان نخست ویژگی img_output$ است که کپی و تغییر اندازه داده شده تصویر اصلی است و آرگومان دوم همان مسیر ورودی به متد است. اگر ویژگی resize برابر با TRUE نبود، پس خود تصویر اصلی (ویژگی img_src$) بدست تابع ()copy بر روی دیسک نوشته می شود.

سه متد ()getWidth و ()getHeight و ()clearCache

کدهای زیر این سه متد را نشان می دهند و فهمیدن کاربرد آنها بسیار ساده است. درون دو متد ()getWidth و ()getHeight به ترتیب تابع های ()imagesx و ()imagesy برای برگشت پهنا (عرض) و بلندا (ارتفاع) تصویر به کار رفته اند.