در نوشته پیشین تا اندازه ای درباره کتابخانه GD در پی چ پی گفتیم و از این نوشته، می خواهیم تابع های بیشتری برای درگرگون کردن (تغییر) تصویر را آموزش دهیم. نخست و پیش از هر چیز برخی از ساده ترین تابع ها به نام ()imagerotate و ()imagescale و ()imagecrop و ()imageflip را آموزش دهیم. همچنین این تابع ها در کتابخانه OpenCV برای زبان های سی پلاس پلاس و پایتون نیز هستند که می توانید از پیوندهای زیر بخوانید.

Flip کردن تصویرها و ویدیوها در OpenCV

تغییر اندازه تصویر در OpenCV

Region Of Interest در OpenCV با پایتون

چرخش تصویر با ()imagerotate

کد زیر الگوی تابع ()imagerotate را نشان می دهد و همانگونه که می بینید، نخست یک متغیر resource به تصویری که می خواهید چرخش دهید را دریافت می کند. آرگومان نخست می تواند متغیری باشد که برگشتی یکی از تابع ها مانند ()imagecreatefromXXX یا ()imagecreatetruecolor بدست آمده است. آرگومان دوم شماره ای است که اندازه زاویه چرخش را نشان می دهد. برای نمونه می خواهید ۱۸۰ یا ۹۰ درجه چرخش داشته باشید. آرگومان سوم نیز رنگ ناحیه پوشش داده نشده پس از چرخش را نشان می دهد.

فرض کنید می خواهید تصویری را از نشانی وب بخوانید و سپس آن را ۹۰ یا ۱۸۰ درجه چرخش دهید و رنگ ناحیه پوشش داده نشده پس از چرخش را برابر با سیاه (شماره صفر) نشان دهید. کد زیر نخست بدست متد ()imagecreatefromjpeg یک تصویر فرمت JPEG را از وب می خواند، سپس آن را ۹۰ درجه چرخش می دهد و در پایان آن را درون مرورگر بدست ()imagejpeg نمایش داده و در پایان متغیر resource بدست ()imagedestroy از میان می رود.

در شکل بالا چون زاویه چرخش برابر با ۷۶ درجه است، پس ناحیه پوشش داده نشده می ماند که رنگ آن را سیاده نشان داده بودیم. در کد زیر آرگومان دومی را برای متد ()imageXXX نشان داده ایم که در اینجا مسیری بر روی دیسک است که می خواهیم تصویر پس از چرخش، با نام تازه ای در دیسک نگهداری شود. بنابراین اگر مسیری بر روی دیسک را در دومین آرگومان تابع های ()imageXXX نشان دهیم، تصویر پردازش شده را می توانیم بر روی دیسک نگهداری کنیم. بنابراین در کد زیر به جای اینکه تصویر بر روی مرورگر نشان داده شود، بر روی دیسک نوشته می شود.

چرخش تصویر با ()imagescale

کد زیر الگوی تابع ()imagescale را نشان می دهد و همانگونه که می بینید، نخست یک متغیر resource به تصویری که می خواهید تغییر مقایس دهید را دریافت می کند. آرگومان نخست می تواند متغیری باشد که برگشتی یکی از تابع ها مانند ()imagecreatefromXXX یا ()imagecreatetruecolor بدست آمده است. آرگومان دوم و سوم به ترتیب اندازه درازا (عرض) و بلندا (ارتفاع) تازه برای تصویر را نشان می دهند.

در کد زیر بازهم نخست یک تصویر از وب خوانده شده و سپس به اندازه ۹۰ درچه چرخش داده می شود و سپس تصویر چرخش داده شده یا بهتر است بگوییم resource به تصویر چرخش داده شده به ورودی تابع ()imagescale فرستاده شده و سپس مقیاس تازه برای تصویر 400x400 خواهد بود که در اینجا کاهش مقیاس است. همچنین اگر اندازه های بزرگتری را بنویسیم، پس افزایش مقیاس خواهیم داشت. چیز دیگری که باید گفت این است که، گفتیم بسیاری از تابع های GD گونه resource برگشت می دهند که در دیگر تابع ها می توانیم آنها را به کار ببریم.

بُرش تصویر با ()imagecrop

کد زیر الگوی تابع ()imagecrop را نشان می دهد و همانگونه که می بینید، نخست یک متغیر resource به تصویری که می خواهید بخشی از آن را برش دهید. آرگومان نخست می تواند متغیری باشد که برگشتی یکی از تابع ها مانند ()imagecreatefromXXX یا ()imagecreatetruecolor بدست آمده است. آرگومان دوم آرایه ای با چهار پارامتر x و y که مختصات گوشه سمت چپ بالای ناحیه بُرش و width و height به ترتیب درازا (عرض) و بلندا (ارتفاع) ناحیه مستطیلی برش را نشان می دهند.

در کد زیر می خواهیم تصویری که از نشانی URL را خوانده ایم را به اندازه 400x400 از گوشه سمت چپ بالای تصویر اصلی برش دهیم. بنابراین آرگومان نخست، برگشتی تابع ()imagecreatefromjpeg و آرگومان دوم آرایه انجمنی که دارای چهار کلید است. کلیدهای x و y به ترتیب مختصاب پیکسلی را نشان می دهند و چون مقدار هر دو صفر است، پس گوشه سمت چپ بالای تصویر را مشخص کرده ایم. سپس مقدار ۴۰۰ را برای آرگومان های width و height نوشته ایم که از گوشه سمت چپ مشخص شده، به اندازه 400x400 از تصویر اصلی جدا می کند. در پایان اگر تابع ()imagecrop به درستی کار کند، پس بدست تابع ()imagejpeg تصویر تازه ساخته شده که در متغیر image2 درون نگهداری شده است، بر روی دیسک نوشته می شود.

Flip کردن تصویر

در نخستین پیوند بالا درباره Flip کردن تصویر در کتابخانه OpenCV در پایتون گفته ایم و در این نوشته می خواهیم همین را در پی اچ پی و بدست تابع ()imageflip آموزش دهیم. یک تصویر را می توان به گونه افقی یا عمودی یا به هر دو گونه Flip کنیم. کد زیر الگوی تابع ()imageflip را نشان می دهد که در آن آرگومان نخست متغیر resource است که به تصویری اشاره دارد که می خواهیم آن را Flip کنیم. آرگومان دوم حالتی است که تصویر به آن گونه Flip می شود. این ارگومان سه مقدار از پیش نوشته شده در پی اچ پی را دریافت می کند که در ادامه گفته ایم. همچنین مقدار برگشتی تابع دیگر resource نیست، بلکه گونه bool است.

  • IMG_FLIP_HORIZONTAL: تصویر ورودی در آرگومان یکم به گونه افقی Flip می شود.
  • IMG_FLIP_VERTICAL: تصویر ورودی در آرگومان یکم به گونه عمودی Flip می شود.
  • IMG_FLIP_BOTH: تصویر ورودی در آرگومان یکم به گونه افقی و عمودی Flip می شود.