تابع ()imagecolorexact اندیس (Index) یک رنگ ویژه در Palette رنگ، را برگشت می دهد. در پردازش تصویر Palette یک مجموعه بی کران از رنگ ها است ولی اگر متغیر resource تصویر را از روی یک فایل تصویر ساخته باشید، پس تنها رنگ های درون تصویر در نظر گرفته می شوند. کد زیر الگوی تابع ()imagecolorextract را نشان می دهد. همانگونه که می بینید برگشتی آن یک شماره int است که همان اندیس رنگ در Palette تصویر است. آرگومان نخست متغیر resource را دریافت می کند و سه آرگومان دیگر با یکدیگر شماره های کد RGB را نشان می دهد. بنابراین سه شماره پایانی، شماره RGB رنگ دلخواه را می سازند.

در کد زیر می خواهیم آرایه ای به نام colors$ را بسازیم که دارای چندین اندیس رنگ در تصویری است که بدست تابع ()imagecreatefrompng ساخته شده است. برای دسترسی به اندیس هر کدام از رنگ ها، چندین بار تابع ()imagecolorextract را فراخوانی و برگشتی آن را درون آرایه colors$ نگهداری کرده ایم.

کپی کردن یک تصویر درون دیگری

پیش از آموزش برخی دیگر از کدهای مربوط به استخراج رنگ از تصویر، باید با برخی دیگر از تابع ها و نمونه کدهای پی اچ پی اشنا شوید. بنابراین در این نوشته، در آغاز، تابعی به نام ()imagecopyresampled را می گوییم که بخشی از یک تصویر را درون تصویر دیگر کپی و تغییر اندازه (Resize) می کند. کد زیر الگوی این تابع را نشان می دهد. در آن آرگومان های یکم و دو برابر با متغیرهای resource به تصویر مقصد (Destination) و تصویر مبدا (Source) هستند.

تابع ()imagecopyresampling یک ناحیه چهارگوش (مستطیلی) را از تصویر src (آٰگومان دوم) به درون تصویر dst (آرگومان یکم) کپی می کند. بنابراین نیاز به دو مختصات یک نقطه با آرگومان dst_x$ و dst_y$ در تصویر dst و نیاز به پهنا (عرض) و درازا (طول) در تصویر dst داریم که با آرگومان های dst_w$ و dst_h$ نشان داده می شوند.

  • آرگومان های dst_x و dst_y نقطه سمت چپ گوشه بالای مستطیل درون تصویر مقصد را نشان می دهند.
  • آرگومان های src_x و src_y نقطه سمت چپ گوشه بالای مستطیل درون تصویر مبدا را نشان می دهند.
  • آرگومان های dst_w و dst_h پهنا و درازای مستطیل درون تصویر مقصدر را نشان می دهند.
  • آرگومان های src_w و src_h پهنا و درازای مستطیل درون تصویر مقصدر را نشان می دهند.

در کد زیر می خواهیم تصویری با فرمت PNG را بر روی مرورگر وب نمایش دهیم، پس تابع ()header را فراخوانی کرده ایم. سپس یک متغیر رشته به نام و مسیر فایل تصویر ساخته ایم. متغیر دیگر percent$ نام دارد که مقدار آن رشته ای است و آن را برای تغییر اندازه دادن به کار می بریم. سپس با متد ()list دو متغیر به نام width$ و height$ می سازیم که هر کدام مقدار width و height تصویر پایه را در خود نگه می دارند که مسیر این تصویر درون متغیر filename$ نگهداری می شود. در نوشته های پیشین گفتیم که در آرایه برگشتی تابع ()getimagesize پهنا (عرض) و بلندا (ارتفاع) تصویر نشان داده می شود.

سپس دو متغیر new_width$ و new_height$ از ضرب متغیرهای width$ و heigth$ در مقدار متغیر percent$ بدست می آیند که اندازه هایی تازه ای هستند که پیش رو آنها را برای آرگومان های dst_w$ و dst_h$ به کار می بریم. از ضرب مقدار ۰.۵ در متغیرهای width$ و height$، مقدار آنها ۱/۲ برابر یا نیم می شود. سپس با تابع ()imagecreatetruecolor تصویر سیاهی با اندازه متغیرهای h$ و new_height$ می سازیم و آن را درون متغیر image_p$ نگهداری می کنیم. سپس باید تصویر src که نام و مسیر آن درون متغیر filename$ است را با تابع ()imagecreatefrompng بسازیم و سپس متغیرهای بدست آمده را به تابع ()imagecopyresampling بفرستیم و در پایان تصویر را بر روی مرورگر نمایش دهیم.

شکل بالا تصویر برگشتی از اسکریپت را نشان می که با نگاه به تصویر اصلی (اینجا)، می بینید که تصویر بدست آمده از اسکریپت، برابر با نیم برابر تصویر اصلی (src) است. در زیر فراخوانی تابع ()imagecopyresampling آمده است که در کد بالا به کار برده ایم. آرگومان های نخست و بدم أن برابر با متغیرهای image_p$ و image$ هستند که برابر با متغیرهای resource به تصویر مقصد و مبدا هستند. سپس آرگومان های سوم (dst_x$)، چهارم (dst_y$)، پنجم (src_x) و ششم (src_y) همگی برابر با صفر هستند و به این گونه خواهد بود که از گوشه سمت چپ بالای تصویر اصلی کپی کردن از گوشه سمت چپ بالای تصویر مقصد انجام می شود.

سپس در آرگومان های هفتم و هشتم که پهنا و بلندا تصویر مقصد و آرگومان های نهم و دهم که پهنا و بلندا تصویر اصلی هستند به تابع فرستاده می شود و چون متغیرهای new_width$ و new_height$ در شماره ۰.۵ ضرب شده اند، پس اندازه تصویر مقصد نیم برابر تصویر اصلی است. بنابراین اگر اندازه متغیر percent$ را برابر با ۲ کنید، پس اندازه تصویر مقصد ۲ برابر خواهد شد.

بدست آوردن پهنا (Width) و بلندا (Height) تصویر

پیش از تابع ()getimagesize را آموزش داده ایم که در آرایه برگشتی آن، دو عنصر نخستین آن، با اندیس های 0 و 1، پهنا و بلندا (ارتفاع) تصویر را نشان می دهند. در پی اچ پی دو تابع ()imagesx و ()imagesy هستند که به ترتیب مقدار پهنا و بلندای متغیر resource تصویر فرستاده شده به آنها را برگشت می دهند.