در نوشته پیشین درباره GD و چندین تابع آن برای نمایش وضعیت کتابخانه GD و پشتیبانی GD از فرمت های گوناگون را آموزش داده ایم. در این نوشته و برای گام نخست، می خواهیم چندین تابع دیگر GD برای نمایش اندازه فایل تصویر و پدید آوردن تصویر (Image Creation) را آموزش خواهیم داد.

تابع ()getimagesize

یکی از ساده ترین و پایه ای ترین کاری که می توانیم انجام دهیم، بدست آوردن اندازه یک فایل است. برای این منظور می توانیم تابع ()getimagesize را به کار ببریم. این تابع دو آرگومان دریافت می کند. آرگومان نخست به نام و مسیر یک فایل تصویری اشاره دارد. مقدار برگشتی، یک آرایه انجمنی است که هر کلید آن یک داده درباره تصویر را نشان می دهد. کلیدها هم به گونه عددی و هم به گونه رشته هستند. دومین آرگومان که اجباری نیست، یک آرایه است که داده هایی را مشخص می کند که ما تنها همین داده ها را می خواهیم که تابع برگشت دهد. در واقع یک فهرست از داده هایی را تعیین می کنیم که می خواهیم تابع تنها همین داده ها را برگشت دهد، به جای آنکه همه داده های بدست آمده از تصویر را برگشت دهد.

در کد زیر نخست یک متغیر به نام filename$ نوشته ایم که مقدار آن رشته ای است که مسیر و نام فایل با پسوند png را نشان می دهد. سپس این متغیر به عنوان آرگومان نخست به تابع فرستاده شده است و سپس خروجی آن که یک آرایه است در متغیری به نام imageInfo$ ریخته می شود. سپس بدست forearch و در هر گام، هم نام کلید (متغیر key$) و هم مقدار هر کلید (متغیر value$) نشان داده می شود که در شکل زیر نمونه ای نشان داده شده است.

در شکل بالا، کلیدهای یکم، دوم و چهارم با اندیس های صفر، یک و سه یک داده را نشان می دهند که به ترتیب برابر با اندازه درازا (عرض) و بُلَندا (ارتفاع) هستند. اگر می خواهید هر کدام از درازا و بلندا را جدا بدست آورید باید اندیس های صفر و یک را به کار ببرید. کلید سوم با اندیس دو، گونه تصویر را نشان می دهد. 

کلید bit شمارگان (تعداد) بیت های برای هر رنگ را نشان می دهد. واپسین کلید که mime نام دارد، گونه فایل را نشان می دهد که در این نوشته، گونه image/png است که نشان می دهد فایل تصویر با فرمت png است. همچنین می توانیم با تابع ()getimagesize، فایل تصویر را از روی وب بخوانیم. برای این منظور به جای مسیر فایل بر روی سیستم فایل، باید نشانی URL به متد فرستاده شودد که شکل زیر این را نشان می دهد. در این باره، شاید کمی زمان بر باشد، زیرا فایل باید از روی اینترنت خوانده شود.

گونه تصویر

در GD از پی اچ پی چندین ثابت از پیش هستند که می توانید فهرست همه آنها را درون این پیوند بخوانید. آن دسته از ثابت هایی که گونه تصویر را نشان می دهند الگوی IMAGETYPE_XXX را دنبال می کنند که به جای XXX می تواند رشته های GIF یا PNG یا دیگران جایگزین شود. در کد زیر تابعی به نام ()is_valid_type نوشته ایم که نام یا مسیر یک فایل تصویری را دریافت می کند و سپس بررسی می کند که آیا فرمت تصویر وارده شده یکی از فرمت های مورد دلخواه ما در آرایه valid_types$ است یا نه؟

نخست بررسی می شود که آیا تابع ()getimagesize مقدار آرایه مورد نظر را برگشت می دهد یا نه؟ اگر این گونه نباشد، پس شماره صفر برگشت داده می شود. تابع ()is_valid_type مقدار یک (برابر با درستی) یا مقدار صفر (برابر با نادرستی) را برگشت می دهد. سپس یک آرایه از نام ثابت های دلخواه ما می نویسیم که هر در واقع فهرستی از گونه های دلخواه ما است که می خواهیم بررسی کنیم که آیا تصویر ورودی از گونه آنها است یا نه؟

سپس با تابع ()in_array بررسی می شود که کلید سوم آرایه برگشتی که دارای اندیس شماره 2 است، آیا برابر با یکی از مقدارهای آرایه valid_types$ است؟ بنابراین کلید سوم آرایه برگشتی که دارای اندیس شماره 2 است مقداری است شماره صحیح که گونه تصویر را نشان می دهد و همچنین هر کدام از ثابت های IMAGETYPE_XXX نیز دارای شمارع عددی صحیح هستند و از این رو در تابع ()in_array بررسی می شود که مقدار کلید سوم، با شماره کدام یک از شماره ثابت های آرایه valid_types$ برابر است. اگر با یکی از آنها برابر باشد، شماره 1 وگرنه شماره صفر برگشت داده می شود.

کانال های تصویر

در پیوند زیر و از نوشته های OpenCV درباره تصویرهای تک کانالی خاکستری (Grayscale) و رنگی سه کانالی (RGB) گفته ایم. تصویرها به گونه ماتریس ها در رایانه نگهداری می شوند که هر کدام از درایه های ماتریس، برابر با یک پیکسل از تصویر است. در تصویرهای تک کانالی، هر دارایه یک تک شماره است که شماره پیکسل میان بازه صفر تا شماره ۲۵۵ است. صفر برابر با تاریک ترین رنگ (سیاه) و ۲۵۵ برابر با روشن ترین رنگ (سفید) است. هر کدام از درایه های ماتریس تصویرهای رنگی سه کانالی از یک لیست از سه شماره است که هر شماره برابر با یکی از رنگ های RGB است.

آشنایی با مفاهیم ابتدایی در OpenCV – تصویر خاکستری و رنگی

همیشه کلید مربوط به کانال برگشت داده نمی شود ولی اگر برگشت داده شد، پس نام کلید برابر با رشته channel است. شکل زیر نمونه ای از آرایه برگشتی، همراه با کلید channel را نشان می دهد.این کلید می تواند یکی از مقدارهای زیر را داشته باشد. بنابراین اگر تصویر RGB باشد شماره 2 و اگر Grayscale باشد، شماره 1 برگشت داده می شود. بنابراین شمارگان (تعداد) کلیدهای آرایه 7 تا خواهد بود.

  • 1 – greyscale
  • 2 – RGB
  • 3 – RGB with palette
  • 4 – greyscale + alpha
  • 6 – RGB + alpha