ایجاد یک نمودار با استفاده از کتابخانه GD. رسم نمودارها در PHP آنچه را تغییر دادیم

برای شناسایی موارد استفاده از ابزارهای گرافیکی در سناریوهای وب، طیف وسیعی از موارد استفاده ممکن از گرافیک را در نظر بگیرید:

  • تصاویر استاتیک، که به طور مستقل ایجاد شده یا از جایی قرض گرفته شده اند، می توانند در یک صفحه HTML جاسازی شوند.
  • می توان از تصاویر تولید شده با برنامه (HTML + CSS) استفاده کرد.
  • می‌توانید از کتابخانه gd برای ایجاد گرافیک ثابت از قبل برای تمام موقعیت‌های ممکن که در طول اجرای یک اسکریپت ایجاد می‌شوند، آنها را در فایل‌ها ذخیره کنید و به صورت مشروط نمایش دهید.

گزینه پیاده سازی گرافیک با استفاده از تصاویر ثابت را به دلیل سادگی آن در نظر نخواهیم گرفت، بنابراین ابتدا یک گزینه ساده (گرافیک HTML + CSS) و سپس استفاده از کتابخانه gd در PHP را در نظر خواهیم گرفت.

گرافیک HTML + CSS

بازدیدکنندگان وب سایت با نمودارهای نوار افقی با کناره های رنگی آشنا هستند، که به ویژه اغلب برای نشان دادن نتایج نظرسنجی استفاده می شود. در نگاه اول، به نظر می رسد که از نوعی ابزار گرافیکی برای ایجاد چنین نمودارهایی استفاده می شود، اما در واقعیت، استفاده از چند اسکریپت ساده کافی است:

کار با گرافیک در PHP، HTML، CSS /* سبک های CSS که طراحی */ بدنه را تشکیل می دهند (ارتفاع: 1em؛ صفحه نمایش: بلوک درون خطی؛ تراز عمودی: وسط) گستره (نمایش: بلوک درون خطی؛ عرض: 120 پیکسل) .نارنجی (زمینه: نارنجی) .سیب (زمینه: #33CC66) .موز (زمینه: زرد) .گوجه فرنگی (زمینه: قرمز) .خیار (زمینه: سبز) .سیب زمینی (زمینه: خاکستری) فرم سفارش میوه ها پرتقال سیب سیب موز سبزیجات گوجه فرنگی خیار سیب زمینی

این مثال هیچ ویژگی جدیدی از PHP را نشان نمی دهد، اما به سادگی یک راه ساده برای ایجاد گرافیک با استفاده از HTML و CSS (در این مورد نمودارهای میله ای) را نشان می دهد:

کتابخانه gd

ابزارهای گرافیکی توضیح داده شده در بخش قبل عملاً قابلیت‌های کد استاندارد HTML را تکمیل می‌کنند (البته شایان ذکر است که ابزار ایجاد گرافیک نسبتاً قدرتمند HTML5 Canvas را پوشش ندادیم). حالا بیایید به توصیف روش‌هایی برای ایجاد گرافیک‌های دلخواه با استفاده از کتابخانه gd برویم.

شرح کلی کتابخانه gd

به طور کلی، جعبه ابزار gd یک کتابخانه از کد C برای ایجاد و دستکاری تصاویر است. این کتابخانه در ابتدا توسط کارکنان با استعداد و سخاوتمند Boutell.com توسعه یافته و در دسترس عموم قرار گرفت.

کتابخانه gd به خودی خود یک برنامه گرافیکی یا طراحی نیست و همچنین یک برنامه کاربردی یا رابط کاربری گرافیکی مستقل را تشکیل نمی دهد. در عوض، کتابخانه gd توابعی را ارائه می دهد که می تواند توسط هر برنامه ای برای انجام دستکاری تصویر مورد نظر فراخوانی شود. این بدان معناست که کتابخانه gd را می توان به هر برنامه C که در آن لازم است از کد این کتابخانه استفاده کرد، پیوند داد. این دقیقا همان مشکلی است که توسعه دهندگان سیستم PHP آن را حل کردند.

در واقع مجموعه ای از توابع رابط برای این منظور نوشته شده است که فراخوانی رویه های gd را از یک اسکریپت PHP آسان می کند. اما خود کتابخانه gd حاوی هیچ کد خاص PHP نیست و رابط‌هایی ایجاد شده است که امکان دسترسی به کتابخانه را از چندین زبان برنامه‌نویسی و محیط برنامه‌نویسی دیگر از جمله Perl، Pascal، Haskell و REXX فراهم می‌کند.

کتابخانه gd به شما این امکان را می دهد که توابع را برای ایجاد تصاویر منبع (در ابتدا خالی، شبیه به یک صفحه کاغذ خالی)، ترسیم و رنگ آمیزی در آن تصاویر منبع به روش های مختلف، و در نهایت تبدیل تصویر از فرمت تصویر داخلی gd به یک استاندارد، فراخوانی کنید. فرمت تصویر و سپس ارسال آن به مقصد نهایی (خروجی در پنجره مرورگر یا ذخیره در یک فایل یا پایگاه داده). و از آنجایی که تمام این عملیات تحت کنترل برنامه انجام می شود و به صورت دستی انجام نمی شود، تصاویر ایجاد شده می توانند به اندازه دلخواه پیچیده شوند و به هر موقعیتی در حین اجرای برنامه که مطلوب است آنها را وابسته کنیم بستگی دارد.

فرمت های تصویر

کتابخانه gd اساساً به شما امکان می دهد تصاویر را با استفاده از فرمت های مختلف وارد و صادر کنید. محبوب‌ترین فرمت‌های تصویر GIF، JPEG و PNG هستند، اگرچه نمونه‌های مورد استفاده عمدتاً از دومی استفاده می‌کنند.

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

اضافه دوم به شرح زیر است. البته نمایش مفهومی فرمت های GIF و PNG بسیار ساده است، اما در عمل خواندن، نوشتن و ارسال تصاویر در این فرمت ها همیشه به صورت فشرده انجام می شود. فشرده سازی ضروری است زیرا ذخیره داده هایی که به صورت شبکه ای از سلول ها نشان داده می شوند به مقدار زیادی حافظه نیاز دارد. یک تصویر ساده 500x400 پیکسلی حاوی 200000 پیکسل است و اگر هر پیکسل به سه بایت نیاز داشته باشد، مقدار حافظه مورد نیاز در حال حاضر بیش از نیم مگابایت است.

موضوع فشرده‌سازی موضوعی گسترده و پیچیده است، اما اکثر الگوریتم‌های فشرده‌سازی مبتنی بر کاهش افزونگی تصویر به منظور کاهش اندازه آن هستند. (به عنوان مثال، مشخص کردن سبز بودن هر پیکسل در یک تصویر نسبت به تعیین مقدار سبز برای هر پیکسل به صورت جداگانه فضای حافظه کمتری نیاز دارد.) متأسفانه، الگوریتم‌های فشرده‌سازی به استفاده از این ویژگی‌ها متکی نیستند زیرا باید چنین تصمیمی بگیرند. مسائل پیچیده ای که روش های حل این مسائل، پیاده سازی شده در الگوریتم فشرده سازی مورد استفاده برای تولید تصاویر در فرمت GIF، حتی به ثبت رسیده است.

نصب کتابخانه

صادقانه بگویم، کار نصب کتابخانه gd و کارکرد موفقیت آمیز آن در ارتباط با یک سیستم PHP بسیار پیچیده است. این به دلیل نقص در نرم افزار PHP یا gd نیست، بلکه کاملاً به دلیل مشکلات پیکربندی است. به ویژه، باید بدانید که کتابخانه‌های gd باید کجا باشند و در واقع کجا هستند، و اطمینان حاصل کنید که مراحل کامپایل و پیوند همه فایل‌های اجرایی به درستی تکمیل شده‌اند. بنابراین، بهترین حالت ممکن این است که کاربر متوجه شود که کتابخانه gd قبلاً نصب شده است و پشتیبانی gd قبلاً در سیستم PHP فعال شده است (خواه از طریق شرکت میزبان وب یا به دلیل اینکه در سیستم PHP نصب شده گنجانده شده است).

بنابراین، نصب کتابخانه gd باید از مرحله صفر شروع شود - با بررسی اینکه آیا این کتابخانه قبلاً نصب شده است یا خیر. ابتدا کد زیر را در فایل اسکریپت خود وارد کنید و نتایج اجرای آن را در مرورگر خود مشاهده کنید، خواه اسکریپت های شما توسط شرکت میزبانی وب شما اجرا شود یا به طور کامل توسط نصب خودتان اجرا شود:

پس از نمایش این صفحه بر روی صفحه، کافی است رشته متن "gd" را در پنجره مرورگر جستجو کنید. این باید یک بخش فرعی را نشان دهد که توضیح می دهد تا چه حد نصب PHP شما اجازه پشتیبانی از کتابخانه gd را می دهد. اگر فقط قصد دارید انواع خاصی از تصاویر را تهیه کنید (مثلا PNG)، و نتایج تابع phpinfo() نشان می‌دهد که پشتیبانی از آن نوع تصویر فعال است، می‌توانید بلافاصله شروع به کار کنید. و اگر اطلاعات نسخه gd شامل کلمه "Bundled" باشد، از کتابخانه gd که با PHP ارائه می شود استفاده می شود.

اگر تلاش برای یافتن ذکری از کتابخانه gd با شکست مواجه شد و شما خودتان در حال نصب PHP هستید، می توانید پیکربندی کتابخانه gd را نصب و پیکربندی کنید. (از طرف دیگر، اگر نصب PHP شما توسط شرکت میزبان شما انجام می شود، تنها گزینه شما این است که از آن شرکت بخواهید که از کتابخانه gd پشتیبانی کند یا از شرکت میزبان وب دیگری استفاده کنید.)

استفاده از کتابخانه gd همراه با PHP بسیاری از مشکلات مربوط به نصب gd را از بین می برد، اما نه همه آنها. واقعیت این است که استفاده از خود نسخه موجود در کیت توزیع به شما امکان می دهد کتابخانه gd را دریافت کنید، اما نه لزوماً همه کتابخانه های لازم برای کار gd. خود کتابخانه gd به چندین کتابخانه دیگر وابسته است: libpng (برای دستکاری تصاویر PNG)، zlib (برای فشرده سازی) و jpeg-6b یا جدیدتر (برای دستکاری تصاویر JPEG در صورت نیاز). این کتابخانه ها قبلاً در بسیاری از نصب های لینوکس وجود دارند، در این صورت ممکن است کافی باشد که گزینه مورد نیاز با (مانند --with-zlib) را در گزینه ها بدون تعیین دایرکتوری نصب قرار دهید. اگر پیکربندی PHP را خودتان انجام می دهید، می توانید به سادگی گزینه --with-gd را اضافه کنید تا مطمئن شوید که نسخه گنجانده شده gd در فایل اجرایی گنجانده شده است. و اگر می خواهید به نسخه دیگری اشاره کنید، به جای آن از گزینه --with-gd=path استفاده کنید.

اگر متوجه شدید که یک یا چند کتابخانه مورد نیاز وجود ندارد، به این معنی است که آن کتابخانه ها باید جداگانه ساخته شوند. برای کسب اطلاعات در مورد مکان یافتن نسخه های فعلی، می توانید با بررسی اسناد موجود در www.libgd.org شروع کنید.

اصول اولیه کار با کتابخانه gd

هنگامی که یک تصویر با استفاده از جعبه ابزار gd ایجاد یا دستکاری می شود، تصویر با فرمت gd ویژه ای نمایش داده می شود که هیچ مطابقتی با هیچ نوع تصویر معمولی ندارد. از نظر تئوری امکان صادرات تصاویر در این فرمت gd وجود دارد، اما چنین عملیاتی به ندرت مورد استفاده قرار می گیرد زیرا تصویر حاصل فشرده نشده است و نمی توان آن را در یک مرورگر یا برنامه گرافیکی ساده نمایش داد.

تصویر پردازش شده با استفاده از جعبه ابزار gd با اطلاعاتی در مورد عرض، ارتفاع و رنگ همه پیکسل ها مشخص می شود که تعداد آنها برابر با حاصلضرب عرض و ارتفاع است. به طور معمول، یک برنامه تعامل خود را با کتابخانه gd یا با ایجاد یک تصویر خالی جدید (که روی آن طراحی و ترسیم می شود) یا با وارد کردن یک تصویر از یک فایل آغاز می کند. معمولاً مراحل زیر انجام می شود: اول توزیع رنگ ها در تصویر، دوم، طراحی و نقاشی یا دستکاری تصویر با استفاده از برخی عملیات های دیگر، سوم، تبدیل تصویر به یک فرمت پذیرفته شده عمومی (مثلا PNG یا JPEG) و آن را به مقصد منتقل کند.

بازنمایی رنگ ها

دو راه برای نمایش رنگ ها در تصاویر gd وجود دارد: نمایش مبتنی بر پالت، که به 256 رنگ محدود می شود، و یک نمایش با رنگ واقعی، که به شما امکان می دهد تعداد دلخواه اعداد رنگ های مختلف RBG را مشخص کنید. در gd 1.x تنها گزینه استفاده از رنگ‌های مبتنی بر پالت بود، اما در gd 2.x و نسخه‌ای از این کتابخانه که با PHP ارائه می‌شود، می‌توان هم تصاویر مبتنی بر پالت و هم تصاویر را با رنگ‌های واقعی ایجاد کرد. نکته ای که باید در نظر داشت این است که هر تصویر gd داده شده باید یا مبتنی بر پالت باشد یا رنگ های واقعی (RGB) داشته باشد. این بدان معناست که هیچ گزینه ای برای معرفی رنگ های واقعی به تصاویر بر اساس یک پالت وجود ندارد.

برای به دست آوردن تصویر خالی اصلی بر اساس پالت، باید تابع ImageCreate() را فراخوانی کنید و برای دریافت رنگ واقعی، از تابع ImageCreateTrueColor() استفاده کنید.

تصاویر مبتنی بر پالت

رنگ ها در قالب قرمز-سبز-آبی (RGB) با استفاده از سه عدد از 0 تا 255 مشخص می شوند. برای مثال، رنگ مشخص شده توسط اعداد (255، 0، 0) قرمز روشن است، رنگ (0، 255، 0) - سبز، رنگ (0، 0، 255) - آبی، رنگ (0، 0، 0) - سیاه، رنگی (255، 255، 255) - سفید و رنگی (127، 127، 127) - خاکستری. با ایجاد بیشتر و بیشتر رنگ‌های جدید، می‌توانید مقادیر سه جزء رنگی را به دلخواه انتخاب کنید.

هر طراحی روی یک تصویر باید با یک رنگ خاص انجام شود و رنگ ها باید قبل از استفاده در تصویر توزیع شوند. علاوه بر این، اولین رنگی که در تصویر توزیع می شود به طور خودکار به رنگ پس زمینه تبدیل می شود. بنابراین، به هیچ وجه نباید فرض کنید که می توانید بدون مشخص کردن رنگ ها انجام دهید و معمولاً عملیات توزیع رنگ ها اولین عملیات پس از ایجاد یک تصویر خالی جدید است.

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

تصاویر مبتنی بر پالت می توانند حداکثر 256 رنگ داشته باشند. (خواننده ممکن است علاقه مند باشد یا ممکن است به این موضوع علاقه مند نباشد که چنین تصاویری واقعاً بر اساس چه چیزی هستند، اما هر پیکسل در یک تصویر مبتنی بر پالت در واقع یک بایت واحد است که فهرست را ذخیره می کند. یک عنصر در پالت 256 رنگ.)

توجه داشته باشید که شاخصی که هنگام توزیع یکی از رنگ‌های یک تصویر برگردانده می‌شود، فقط برای آن تصویر معنادار است. به عنوان مثال، اگر یک اسکریپت PHP به رنگی که در یک تصویر توزیع شده است، $black را اختصاص دهد، استفاده از آن متغیر به عنوان ورودی رنگ برای یک فرمان ترسیمی که برای پردازش تصویر دیگر فراخوانی می‌شود، منطقی نیست.

تصاویر با رنگ های واقعی

gd 2.0 و نسخه های جدیدتر نیز توانایی ایجاد تصاویر غیر مبتنی بر پالت را فراهم می کند که در آن هر پیکسل یک عدد رنگ دلخواه RGB را ذخیره می کند. در این فرمت به اصطلاح واقعی رنگ، تعداد رنگ های ممکن بسیار زیاد است. این ویژگی نه تنها دامنه بیان هنری را به طور نامحدود گسترش می دهد، بلکه به شما امکان می دهد تصاویر PNG و JPEG را صادقانه با رنگ های واقعی بارگذاری شده در حافظه با استفاده از جعبه ابزار gd بازتولید کنید.

به جز اینکه برای ایجاد تصویر اولیه از عملکرد متفاوتی استفاده می شود و هیچ محدودیتی برای انتخاب رنگ های مختلف وجود ندارد، اصول کار با تصاویر با رنگ واقعی مشابه تصاویر مبتنی بر پالت است.

به طور خاص، همچنان می‌توانید ImageColorAllocate() را برای ایجاد رنگ‌های جدید فراخوانی کنید و به متغیری که مقدار بازگشتی آن را برای استفاده بعدی در دستورات طراحی اختصاص دهید، اختصاص دهید. تنها تفاوت این است که مقدار بازگشتی شماره رنگ RGB است، نه شاخص عنصر در پالت. علاوه بر این، در تصاویر با رنگ‌های واقعی، هیچ مفهومی از رنگ پس‌زمینه ایجاد شده به عنوان یک اثر جانبی تابع ImageColorAllocate() وجود ندارد. در نتیجه مقداردهی اولیه، به همه پیکسل ها نام سیاه (0، 0، 0) اختصاص داده می شود.

شفافیت

نسخه‌های gd 2.x از مفهوم شفافیت پشتیبانی می‌کنند. این از یک کانال آلفا (علاوه بر مقادیر قرمز، سبز و آبی) برای نشان دادن شفافیت رنگ استفاده می کند. این اجازه می دهد، برای مثال، یک شکل بر روی شکل دیگر قرار گیرد تا شکل اول تا حدی قابل مشاهده باشد نه اینکه به طور کامل با شکل دوم همپوشانی داشته باشد.

در PHP، بسیاری از توابع برای کار با تصاویر دارای یک آنالوگ حاوی کلمه "alpha" در نام هستند که نشان می دهد در این توابع رنگ با چهار مقدار (R، G، B، A) نشان داده می شود. به عنوان مثال، تابع imageColorAllocate () سه پارامتر می گیرد و هنگام فراخوانی تابع ImageColorAllocateAlpha() باید پارامتر چهارم را با مقدار بین 0 تا 127 مشخص کنید. مقدار صفر نشان می دهد که رنگ کاملاً مات است و یک مقدار از 127 نشان می دهد که رنگ کاملا مات و شفاف است

مختصات و دستورات رسم

پس از ایجاد یک تصویر با استفاده از جعبه ابزار gd، یک سیستم مختصات به طور ضمنی ایجاد می شود که به شما امکان می دهد دستورات ترسیمی را در آن مشخص کنید. مقادیر مختصات محدود کننده در این سیستم با پارامترهای مشخص شده عرض و ارتفاع تصویر تعیین می شود.

مبدا مختصات در این سیستم، مربوط به مختصات (0، 0)، در گوشه سمت چپ بالای تصویر قرار دارد. جهت مثبت برای مقادیر X از چپ به راست و برای مقادیر Y از بالا به پایین است. (در سیستم های مختصات گرافیک کامپیوتری، این مکان مبدأ رایج است، اما کسانی که هندسه تحلیلی را مطالعه کرده اند، به نظر می رسد عادت کرده اند که مبدا در گوشه سمت چپ پایین نمودار باشد.)

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

هیچ چیزی برای جلوگیری از دستورات ترسیمی که فراتر از تصویر مشخص شده است، وجود ندارد، اما چنین ترسیمی هیچ اثر قابل مشاهده ای ندارد. به عنوان مثال، اگر همه مقادیر مختصات منفی باشند، یک مستطیل در تصویر قابل مشاهده نخواهد بود.

تبدیل فرمت

تمام عملیات طراحی و دستکاری تصویر بر روی تصویر ارائه شده در فرمت gd داخلی انجام می شود. و پس از اتمام این عملیات، اسکریپت می تواند یکی از دستورات تبدیل و خروجی (imagepng، imagetjpeg و ...) را فراخوانی کند تا این تصویر را به فرمت گرافیکی مورد نیاز تبدیل کرده و در پنجره مرورگر کاربر (یا به یک فایل) خروجی بگیرد.

آزاد کردن منابع

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

توابع کتابخانه gd

ما قصد نداریم در این مقاله تمام توابع ارائه شده در رابط gd مفسر PHP را به طور جداگانه فهرست و شرح دهیم. برای آشنایی با این اطلاعات، توصیه می کنیم از بخش «پردازش و تولید تصویر» کتابچه راهنمای php.net استفاده کنید. اکثر توابع gd در یکی از دسته بندی های نشان داده شده در جدول زیر قرار می گیرند. توجه داشته باشید که نام توابع فهرست شده در این جدول با حروف بزرگ نوشته شده اند تا حرف اول هر کلمه راحت تر خوانده شود، اما این شرط همیشه در نمونه های کد رعایت نمی شود زیرا نام توابع PHP به حروف بزرگ و کوچک حساس نیستند:

طبقه بندی توابع gd یادداشت مثال را تایپ کنید
توابع ایجاد تصویر ImageCreate()، ImageCreateTruecolor()، ImageCreateFromGd()، ImageCreateFromJpeg() یک تصویر gd جدید برگردانید. تابع ImageCreate() عرض و ارتفاع تصویر را به عنوان پارامتر در نظر می گیرد و پارامترهای سایر توابع یک مسیر فایل، URL یا رشته ای است که حاوی تصویری است که قبلا ایجاد شده است که باید بارگذاری و به فرمت gd تبدیل شود.
توابعی که عملیات توزیع رنگ را انجام می دهند ImageColorAllocate()، ImageColorAllocateAlpha()، ImageColorDeallocate() تابع ImageColorAllocate() یک دسته تصویر و مقادیر قرمز، سبز و آبی مورد نیاز را به عنوان پارامتر می گیرد و سپس یک عدد رنگ را برای استفاده بعدی در عملیات ترسیم و ترسیم برمی گرداند. تابع ImageColorAllocateAlpha یک پارامتر اضافی را می پذیرد - ضریب شفافیت (0-127)
توابعی که عملیات تطبیق رنگ را انجام می دهند ImageColorClosest()، ImageColorClosestAlpha()، ImageColorExact()، ImageColorExactAlpha() شاخص رنگ منطبق را در تصویر پالت شده برگردانید. توابع حاوی کلمه "نزدیکترین" در نام خود رنگی را که به بهترین وجه منطبق است را برمی گرداند (دقت تطابق به عنوان فاصله بین نقاط در فضای مقدار RGB اندازه گیری می شود). توابع با نام "دقیق" فقط در صورتی شماره رنگ را برمی‌گردانند که با رنگ جستجو شده یکسان باشد، در غیر این صورت مقدار -1 را برمی‌گردانند، توابع با نام "آلفا" روی رنگ‌ها عمل می‌کنند که با استفاده از چهار مقدار (با رنگ های شفاف)
توابع ترسیم خط ImageLine()، ImageDashedLine()، ImageRectangle()، ImagePolygon()، ImageEllipse()، ImageArc() آنها برای ترسیم بخش های مستقیم یا منحنی های شکل مشخص استفاده می شوند. به طور معمول، اولین پارامتر هر یک از این توابع تصویر، آخرین پارامتر رنگ و پارامترهای میانی مختصات X و Y هستند.
تنظیمات قلم رسم خط ImageSetStyle()، ImageSetThickness() تغییر تنظیماتی که بر ویژگی های خطوط تولید شده توسط دستورات خط کشی بعدی تأثیر می گذارد (برخی از این توابع فقط برای gd 2.0.1 یا نسخه های جدیدتر قابل اجرا هستند)
توابع ترسیم و پر کردن ImageFilledRectangle()، ImageFilledEllipse()، ImageFilledPolygon()، ImageFilledArc()، ImageFill() به عنوان یک قاعده، آنها شبیه به عملکردهای مربوطه برای ترسیم خطوط هستند، اما آنها نه تنها برای ترسیم خطوط مناطق، بلکه برای پر کردن مناطق ایجاد شده با رنگ نیز فراهم می کنند. تابع ویژه ImageFill() یک عملیات پر کردن را با استفاده از یک رنگ پر مشخص انجام می دهد. پر کردن در تمام جهات با شروع مختصات XY مشخص انجام می شود (برخی از این ویژگی ها به gd 2.0.1 یا بالاتر نیاز دارند)
توابع کار با متن ImageString()، ImageLoadFont() تابع ImageString یک دسته تصویر، شماره قلم، مختصات X و Y، یک رشته متن و یک رنگ را به عنوان پارامتر می گیرد. اگر شماره فونت بین 1 تا 5 باشد، یکی از پنج فونت داخلی برای نمایش خط به این رنگ استفاده می شود. از طرف دیگر، یک عدد فونت بزرگتر از 5 نشان دهنده نتیجه بارگذاری یک فونت تخصصی با استفاده از تابع ImageLoadFont() است.
توابع صادرات ImagePng()، ImageJpeg() تصویر gd داخلی را به تصویری با فرمت مناسب تبدیل کنید و سپس این تصویر را به جریان خروجی ارسال کنید. اگر فقط یک پارامتر مشخص شود (دسته تصویر)، تصویر به کاربر بازتاب داده می شود و اگر از پارامتر اضافی که یک مسیر فایل است استفاده شود، مقصد جریان خروجی به فایل تبدیل می شود.
عملکرد تخریب تصویر ImageDestroy() یک دسته تصویر را به عنوان پارامتر می گیرد و تمام منابع مرتبط با تصویر را آزاد می کند
پشتیبانی از تصویر HTTP

برای اینکه یک تصویر به درستی در مرورگر کاربر نمایش داده شود، باید مشخص شود که تصویر از کجا آمده و فرمت آن چیست. بنابراین، متأسفانه نمی توان به سادگی، مثلاً فراخوانی تابع imageToPng() را در فایل HTML تولید شده پیاده سازی کرد و در نتیجه مشکل نمایش تصویر را حل کرد. در اصل، شما باید کد خروجی تصویر را با کد HTML تولید شده در اسکریپت PHP جایگزین کنید و برای این کار می توانید از یکی از سه گزینه توضیح داده شده در زیر استفاده کنید.

ایجاد تصاویر تمام صفحه

کل صفحه تولید شده را می توان به عنوان یک تصویر قالب بندی کرد. در این مورد، شما باید یک هدر HTTP را قبل از داده های تصویر ارسال کنید، در نتیجه اعلام کنید که آنچه در زیر می آید یک تصویر از نوع خاصی است. به عنوان مثال، خطوط زیر ممکن است در انتهای اسکریپت ارائه شود:

// ... کدی که یک تصویر ایجاد می کند و آن را // به متغیر $image header("Content-type: image/png"); // نمایش عنوان در مرورگر imagepng($image); // داده های خود تصویر را که به فرمت PNG تبدیل شده است ارسال کنید imagedestroy($image); // منابع را آزاد کنید

مزیت این روش این است که هر اطلاعاتی، از جمله پارامترهای POST، می تواند برای انتقال دستورالعمل ها در مورد ترکیب تصویر آینده استفاده شود. نکته منفی این است که صفحه به دست آمده نمی تواند حاوی هیچ کد HTML معمولی باشد. در واقع، شما حتی باید مراقب باشید که هیچ خروجی متنی را قبل از عنوان و تصویر در اسکریپت های خود ارسال نکنید، زیرا این به منزله ارسال پیش از موعد محتوا است. در این حالت پیغام خطای «هدرها قبلا ارسال شده است...» ظاهر می شود.

تعبیه تصاویر ذخیره شده در فایل ها

اول از همه، توجه داشته باشید که HTML از توصیفگر پشتیبانی می کند ، که به شما امکان می دهد با تعیین مسیر فایل تصویر یا URL، مانند مثال زیر، یک تصویر را جاسازی کنید:

این طراحی برای فایل‌های تصویر استاتیک اعمال می‌شود، اما دلیلی وجود ندارد که نتواند جاسازی یک تصویر جدید ایجاد شده را فعال کند. بنابراین، می توانید اسکریپتی تهیه کنید که در آن ابتدا یک تصویر ایجاد شود، سپس داده های تصویر در یک فایل محلی نوشته شده و سپس کد HTML با توصیفگر مربوطه تولید شود. ، به فایل جدید ایجاد شده اشاره می کند.

تنها معایب این روش این است که اولاً، فرآیند ایجاد صفحه باید شامل نوشتن فایل باشد، که می‌تواند زمان‌بر باشد، و ثانیاً، باید تعیین کنید که پس از اتمام کار با فایل‌ها چه کاری انجام دهید.

اما در یک موقعیت خاص این رویکرد ایده آل است. این در مورد ایجاد و ذخیره تصاویری است که مجموعه ای محدود از انتخاب ها را نشان می دهد. در این مورد، روش خاصی برای مرتبط کردن یک موقعیت خاص با نام فایل تصویری وجود دارد. وقتی برخی از این موقعیت‌ها پیش می‌آیند که نیاز به خروجی تصویر دارند، بررسی می‌شود تا ببینیم آیا فایل مربوطه از قبل وجود دارد یا خیر. اگر پاسخ مثبت باشد، پیوندی به این فایل به سادگی اعمال می‌شود که به صورت توصیفگر قالب‌بندی شده است و اگر پاسخ منفی بود، یک تصویر ایجاد می‌شود، در یک فایل نوشته می‌شود و دوباره پیوندی به این تصویر اعمال می‌شود. در نهایت، ایجاد فایل های جدید به سادگی ضروری نخواهد بود.

جاسازی تصاویر تولید شده در اسکریپت ها

در نهایت، دلیلی وجود ندارد که نتوانید یک اسکریپت تصویر مستقل ارائه دهید و سپس تصویر حاصل را در یک صفحه پویا که توسط اسکریپت دیگری ایجاد شده است، با مشخص کردن در توصیفگر، جاسازی کنید. آدرس این اسکریپت تنها مشکل انتخاب نحوه انتقال داده های لازم به صفحه وابسته است. به عنوان مثال، دسته ای که یک تصویر جاسازی شده را نشان می دهد ممکن است به شکل زیر باشد:

در این مورد، اسکریپت ballpage.php تصاویر PNG توپ های رنگی را که در موقعیت های مختلف تصویر قرار دارند، برمی گرداند.

اما استفاده از این روش می تواند مشکلاتی را ایجاد کند زیرا وب سرورها و مرورگرها گاهی اوقات پسوند فایل های در حال پردازش را بررسی می کنند و زمانی که نتایج بررسی را دریافت می کنند، واکنش متفاوتی نسبت به آنها نشان می دهند. برای مثال، ممکن است نیاز باشد که به اسکریپت رندر صفحه توپ یک پسوند .php داده شود تا سرور آپاچی بتواند تشخیص دهد که کد سرور باید به عنوان کد PHP تفسیر شود (اگرچه حالت پردازش مورد نیاز را نیز می‌توان از طریق فایل‌های پیکربندی مشخص کرد).

با این حال، نسخه‌های غیراستاندارد مرورگرها نیز وجود دارند که امکان تولید تصویر از یک فایل با پسوند php را در نظر نمی‌گیرند، حتی اگر هدر ارسال شده نشان‌دهنده این است که یک تصویر دنبال می‌شود. بنابراین، هنگام استفاده از این روش، باید اسکریپت ها را در مرورگرهای مختلف تست کنید و مطمئن شوید که دایره مورد نظر کاربران، صفحات را به شکل مورد نظر شما دریافت خواهند کرد.

در زیر نمونه هایی از استفاده از کتابخانه gd برای ایجاد تصاویر آورده شده است.

نمونه ای از استفاده از کتابخانه gd: ایجاد اشکال ساده

در مثال زیر نحوه استفاده از کتابخانه gd برای ایجاد یک طراحی حاوی اشکال هندسی ساده را نشان خواهیم داد:

تنظیمات را با تنظیمات خود جایگزین کنید و این فایل را با نام connect-to-database.php در پوشه fcdemo ذخیره کنید.

بیایید داده های تصادفی را وارد کنیم

اگر این یک پروژه واقعی بود، جدول کاربران در طول زمان رشد می کرد، اما برای نمایش، باید مقداری داده را وارد کنیم. بیایید یک اسکریپت کوچک بنویسیم که داده های تصادفی را در جدول وارد می کند. اگر کد زیر را متوجه نشدید نگران نباشید - برای این آموزش مهم نیست.

این فایل به نام generate-random-data.php را در یک پوشه ذخیره کنید.

ابتدا فایل اتصال پایگاه داده را قرار می دهیم. سپس یک بازه زمانی تعیین می کنیم که از آن زمان برای ثبت نام کاربر به صورت تصادفی انتخاب می شود. می توانید تعداد ردیف هایی که قرار است درج شوند را تغییر دهید. برای این کار باید متغیر $RecordsToInsert را تنظیم کنید.

سپس اسکریپت را برای درج رکوردهای تولید شده در پایگاه داده اجرا می کنیم. برای شروع این فرآیند، به این آدرس بروید - http://localhost/fcdemo/generate-random-data.php.

در نهایت باید این پیام را مشاهده کنید: "رکوردهای درج شده ($RecordsToInsert)"

مرحله 2. اسکلت وب سایت را آماده کنید

برای نمایش نمودار خود باید یک صفحه بسیار ساده ایجاد کنیم. چیزی شبیه به این:

FusionCharts نسخه 3.2 - نسخه ی نمایشی PHP LinkedCharts