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

در اینجا نیاز به دو فایل داریم که می توانید یکی را index.php و دیگری را functions.php بنامید. در فایل index.php کدهای مربوط به چرخش تصویر و یک سری کد HTML نوشته می شود و در فایل functions.php دو تابع به نام ()orientation و ()orientation_degree نوشته می شود. بنابراین تابع های برنامه در functions.php نوشته شده و سپس این فایل در آغاز فایل index.php و به کمک دستور require پیوست می شود.

یکی از کلید هایی که در آرایه برگشتی از تابع ()exif_read_data برگشت داده می شود، Orientation نام دارد که در شکل زیر نشان داده شده است. Orientation جهتی از دوربین را نشان می دهد که تصویر با آن گرفته شده است. توجه کنید که Exif داده هایی درباره تصویرهای گرفته شده با دوربین عکاسی یا گوشی های همراه و تبلت ها است.

در شکل زیر از این سایت می توانید ببینید که این کلید می تواند یکی از چهار مقدار 1 برای جهت نرمال دوربین، 8 برای چرخش ۹۰ درجه دوربین، 3 برای چرخش ۱۸۰ درجه دوربین و 6 چرخش ۲۷۰ درجه دوربین را داشته باشد. در شکل بالا چون دوربین در جهت عادی عکس گرفته، پس شماره 1 برای کلید Orientation داده شده است.

تابع ()oerientation

این تابع یک آرایه را از ورودی دریافت می کند که این آرایه، همان آرایه برگشتی از تابع ()exif_read_data است. در کد زیر می بینید که در یک حلقه foreach هر یک از دوتایی Key=Value در متغیرهای key$ و value$ ریخته می شود و سپس بررسی می شود که آیا یکی از کلیدها Orientation هست یا نه؟ اگر چنین کلیدی باشد، پس مقدار آن که در متغیر value$ هست برگشت داده می شود.

تابع ()oerientation_degree

این تابع یک ورودی رادریافت می کند که این شماره ای است که سو (جهت) را نشان می دهد. سپس در یک عبارت switch بررسی می شود که شماره ورودی کدام یک از شماره های 1 یا 8 یا 3 یا 6 است و بر پایه هر یک، یک شماره که درجه چرخش است را برگشت می دهد.

فایل index.php

چون در این فایل می خواهیم تابع های پیشین را به کار ببریم، پس در آغاز این فایل باید با دستور require فایل functions.php را پیوست کنیم. سپس دو متغیر به نام original_filename$ و rotated_filename$ تعریف کرده ایم که به ترتیب مسیر فایل ورودی و فایل چرخش داده شده را نگه می دارند.

سپس نخست با متد ()exif_read_data فایل original_filename$ را می خوانیم و سپس آرایه برگشتی که در متغیر exif_data$ است را به تابع ()orientation می فرستیم و سپس مقدار برگشتی آن که یک شماره صحیح هست را در متغیر orientation$ نگه می داریم و سپس خود این مقدار را به تابع ()orientation_degree می فرستیم و آن نیز درجه چرخش را برگشت می دهد.

کد کامل