Php qrafiklərinin çəkilməsi. PHP-də qrafiklərin yaradılması. PHP kodunu təkmilləşdirək




Veb ssenarilərində qrafik alətlərinin istifadəsini müəyyən etmək üçün aşağıdakı mümkün qrafik istifadə hallarını nəzərdən keçirin:

  • Müstəqil olaraq yaradılmış və ya haradansa götürülmüş statik şəkillər HTML səhifəsinə daxil edilə bilər.
  • Proqramlı şəkildə yaradılan şəkillərdən (HTML + CSS) istifadə edilə bilər.
  • Siz gd kitabxanasından skriptin icrası zamanı yarana biləcək bütün mümkün vəziyyətlər üçün statik qrafikləri əvvəlcədən yaratmaq, onları fayllarda saxlamaq və şərti olaraq göstərmək üçün istifadə edə bilərsiniz.

Sadəliyinə görə statik şəkillərdən istifadə edərək qrafiklərin tətbiqi variantını nəzərdən keçirməyəcəyik, ona görə də əvvəlcə sadə variantı (HTML + CSS qrafikası) nəzərdən keçirəcəyik, sonra isə PHP-də gd kitabxanasından istifadə etməyi nəzərdən keçirəcəyik.

Qrafik HTML + CSS

Vebsayt ziyarətçiləri, xüsusilə tez-tez sorğu nəticələrini göstərmək üçün istifadə olunan rəngli tərəfləri olan üfüqi bar qrafikləri ilə tanışdırlar. İlk baxışdan belə diaqramların yaradılması üçün hansısa qrafik alətlərdən istifadə edildiyi görünür, amma əslində bir neçə sadə skriptdən istifadə etmək kifayətdir:

PHP, HTML, CSS-də qrafiklərlə işləmək /* Dizaynı təşkil edən CSS üslubları */ body div ( hündürlük: 1em; displey: inline-block; vertical-align: middle ) span ( display: inline-block; width: 120px ) .portağal ( fon: narıncı ) .alma ( fon: #33CC66 ) .banan ( fon: sarı ) .pomidor ( fon: qırmızı ) .xiyar ( fon : yaşıl ) .kartof ( fon : boz ) Sifariş forması Meyvələr Portağallar Almalar Bananlar Tərəvəzlər Pomidor Xiyar Kartof

Bu nümunə PHP-nin heç bir yeni xüsusiyyətlərini nümayiş etdirmir, sadəcə olaraq HTML və CSS-dən istifadə edərək qrafika yaratmağın sadə yolunu göstərir (bu halda bar diaqramları):

gd kitabxana

Əvvəlki bölmədə təsvir olunan qrafik alətlər standart HTML kodunun imkanlarını praktiki olaraq tükəndirir (baxmayaraq ki, biz kifayət qədər güclü HTML5 Canvas qrafika yaratma alətini əhatə etməmişik). İndi gd kitabxanasından istifadə edərək həqiqətən ixtiyari qrafiklərin yaradılması üsullarının təsvirinə keçək.

gd kitabxanasının ümumi təsviri

Ümumiyyətlə, gd alət dəsti şəkillər yaratmaq və manipulyasiya etmək üçün C kodunun kitabxanasıdır. Bu kitabxana əvvəlcə Boutell.com-un istedadlı və səxavətli əməkdaşları tərəfindən hazırlanmış və ictimaiyyətə təqdim edilmişdir.

gd kitabxanasının özü qrafika və ya rəsm proqramı deyil, müstəqil proqram və ya qrafik istifadəçi interfeysi də təşkil etmir. Bunun əvəzinə, gd kitabxanası istənilən görüntü manipulyasiyasını yerinə yetirmək üçün istənilən proqram tərəfindən çağırıla bilən funksiyaları təmin edir. Bu o deməkdir ki, gd kitabxanası bu kitabxananın kodundan istifadə etmək lazım olan istənilən C proqramı ilə əlaqələndirilə bilər. PHP sisteminin tərtibatçıları məhz bu problemi həll etdilər.

Əslində, bu məqsədlə PHP skriptindən gd prosedurlarını çağırmağı asanlaşdıran bir sıra interfeys funksiyaları yazılmışdır. Lakin gd kitabxanasının özündə heç bir PHP xüsusi kodu yoxdur və kitabxanaya Perl, Pascal, Haskell və REXX daxil olmaqla bir neçə digər proqramlaşdırma dillərindən və proqramlaşdırma mühitlərindən daxil olmaq üçün interfeyslər hazırlanmışdır.

gd kitabxanası sizə mənbə şəkilləri yaratmaq (əvvəlcə boş, boş vərəqə bənzəyən), müxtəlif üsullarla həmin mənbə şəkilləri çəkmək və rəngləmək və nəticədə təsviri gd-nin daxili şəkil formatından standart formata çevirmək üçün funksiyaları çağırmağa imkan verir. şəkil formatı və sonra onu son təyinat yerinə göndərin (brauzer pəncərəsində çıxarın və ya faylda və ya verilənlər bazasında saxlayın). Və bütün bu əməliyyatlar proqramın nəzarəti altında yerinə yetirildiyindən və əl ilə həyata keçirilmədiyindən, yaradılmış təsvirlər istədiyiniz qədər mürəkkəbləşə bilər və proqramın icrası zamanı onları asılı vəziyyətə gətirmək arzu olunan istənilən vəziyyətdən asılı ola bilər.

Şəkil formatları

gd kitabxanası əsasən müxtəlif formatlardan istifadə edərək şəkilləri idxal və ixrac etməyə imkan verir. Ən populyar şəkil formatları GIF, JPEG və PNG-dir, baxmayaraq ki, istifadə edilən nümunələr əsasən sonuncudan istifadə edir.

GIF və PNG formatları bəzi əlavələrlə piksellərə uyğun rəngli elementlər şəbəkəsini təsvir etmək üçün nəzərdə tutulub. Birinci əlavə odur ki, hüceyrələr rəng nömrələri cədvəlində faktiki rəng nömrələrini və ya indeksləri ehtiva edə bilər. (Birinci seçim daha ifadəli şəkillər yaratmağa imkan verir, çünki o, istənilən sayda müxtəlif rənglər təqdim etməyə imkan verir, sonuncu seçim isə daha yığcam şəkillər yaratmağa kömək edir.)

İkinci əlavə aşağıdakı kimidir. Əlbəttə ki, GIF və PNG formatlarının konseptual təsviri olduqca sadədir, lakin praktikada bu formatlarda təsvirlərin oxunması, yazılması və ötürülməsi həmişə sıxılmış formada həyata keçirilir. Sıxılma zəruridir, çünki hüceyrələr şəbəkəsi kimi təqdim olunan məlumatların saxlanması böyük miqdarda yaddaş tələb edir. Sadə 500x400 piksel təsvirdə 200.000 piksel var və əgər hər piksel üç bayt tələb edirsə, tələb olunan yaddaşın həcmi artıq yarım meqabaytdan çoxdur.

Sıxılma mövzusu geniş və mürəkkəb mövzudur, lakin sıxılma alqoritmlərinin əksəriyyəti onun ölçüsünü azaltmaq üçün təsvirin artıqlığını azaltmağa əsaslanır. (Məsələn, təsvirdəki hər pikselin yaşıl olduğunu müəyyən etmək, hər piksel üçün ayrı-ayrılıqda yaşıl dəyəri təyin etməkdən daha az yaddaş sahəsi tələb edəcək.) Təəssüf ki, sıxılma alqoritmləri bu xassələrin istifadəsinə etibar etmir, çünki onlar belə qərarlar verməlidirlər. GIF formatında şəkillər yaratmaq üçün istifadə edilən sıxılma alqoritmində tətbiq olunan bu problemlərin həlli üsullarının hətta patentləşdirildiyi mürəkkəb problemlər.

Kitabxananın quraşdırılması

Açığını deyim ki, gd kitabxanasının quraşdırılması və onun PHP sistemi ilə birlikdə uğurla işləməsi kifayət qədər mürəkkəbdir. Bu, PHP və ya gd proqram təminatındakı hər hansı çatışmazlıqlara görə deyil, tamamilə konfiqurasiya problemləri ilə bağlıdır; xüsusilə, gd kitabxanalarının harada olması lazım olduğunu və əslində harada olduğunu anlamalı və bütün icra olunan sənədlərin tərtibi və əlaqələndirilməsi addımlarının düzgün şəkildə tamamlanmasını təmin etməlisiniz. Buna görə də, mümkün olan ən yaxşı vəziyyət istifadəçinin gd kitabxanasının artıq quraşdırıldığını və gd dəstəyinin PHP sistemində artıq aktiv olduğunu aşkar etməsidir (ya veb hostinq şirkətinin izni ilə və ya quraşdırılmış PHP sisteminə daxil olduğu üçün).

Buna görə də, gd kitabxanasının quraşdırılması sıfır addımdan - bu kitabxananın artıq quraşdırılıb-quraşdırılmadığını yoxlamaqla başlamalıdır. Əvvəlcə aşağıdakı kodu skript faylınıza daxil edin və skriptlərinizin veb hostinq şirkətiniz tərəfindən idarə olunmasından və ya tamamilə öz quraşdırmanız tərəfindən idarə olunmasından asılı olmayaraq, brauzerinizdə işləmə nəticələrinə baxın:

Bu səhifəni ekranda göstərdikdən sonra sadəcə olaraq brauzer pəncərəsində "gd" mətn sətirini axtarın. Bu, PHP quraşdırmanızın gd kitabxanasını dəstəkləməyə nə dərəcədə imkan verdiyini təsvir edən alt bölməni ortaya qoymalıdır. Əgər siz yalnız müəyyən növ şəkillər hazırlamaq niyyətindəsinizsə (məsələn, PNG) və phpinfo() funksiyasının nəticələri bu tip şəkillər üçün dəstəyin aktiv olduğunu göstərirsə, dərhal işə başlaya bilərsiniz. Və əgər gd versiyası məlumatında "birləşdirilmiş" sözü varsa, PHP ilə birlikdə gələn gd kitabxanasından istifadə olunur.

Əgər gd kitabxanasının qeydini tapmaq cəhdi uğursuzluqla başa çatırsa və siz PHP-ni özünüz quraşdırırsınızsa, gd kitabxanasının konfiqurasiyasını quraşdıra və konfiqurasiya edə bilərsiniz. (Digər tərəfdən, əgər PHP quraşdırmanız hostinq şirkətiniz tərəfindən həyata keçirilirsə, yeganə seçiminiz həmin şirkətdən gd kitabxanasına dəstək verməsini xahiş etmək və ya başqa veb hostinq şirkətindən istifadə etməkdir.)

PHP ilə birlikdə gələn gd kitabxanasından istifadə gd-nin quraşdırılması ilə bağlı bir çox əngəlləri aradan qaldırır, lakin hamısını yox. Fakt budur ki, paylama dəstinə daxil olan versiyanın özündən istifadə gd kitabxanasını əldə etməyə imkan verir, lakin gd-nin işləməsi üçün lazım olan bütün kitabxanaları mütləq deyil. gd kitabxanasının özü bir neçə başqa kitabxanadan asılıdır: libpng (PNG şəkillərini manipulyasiya etmək üçün), zlib (sıxılma üçün) və jpeg-6b və ya daha sonrakı (lazım olduqda JPEG şəkillərini manipulyasiya etmək üçün). Bu kitabxanalar artıq bir çox Linux qurğularında mövcuddur və bu halda quraşdırma kataloqunu göstərmədən tələb olunan variantı (məsələn, --with-zlib) seçimlərə daxil etmək kifayət ola bilər. PHP konfiqurasiyasını özünüz edirsinizsə, gd-nin daxil edilmiş versiyasının icra olunana daxil olmasını təmin etmək üçün sadəcə --with-gd seçimini əlavə edə bilərsiniz. Fərqli versiyaya işarə etmək istəyirsinizsə, bunun əvəzinə --with-gd=path seçimindən istifadə edin.

Bir və ya daha çox tələb olunan kitabxananın olmadığını görsəniz, bu o deməkdir ki, həmin kitabxanalar ayrıca tikilməlidir. Cari versiyaları harada tapmaq barədə məlumat almaq üçün www.libgd.org saytında yerləşən sənədləri nəzərdən keçirərək başlaya bilərsiniz.

gd kitabxanası ilə işləməyin əsas prinsipləri

Şəkil gd alət dəstindən istifadə edilərək yaradıldıqda və ya manipulyasiya edildikdə, şəkil heç bir şərti təsvir növünə uyğun gəlməyən xüsusi gd formatında təqdim olunur. Bu gd formatında şəkilləri ixrac etmək nəzəri cəhətdən mümkündür, lakin belə bir əməliyyat nadir hallarda istifadə olunur, çünki nəticədə alınan şəkil sıxılmamışdır və brauzerdə və ya sadə qrafik proqramında göstərilə bilməz.

gd alətlər dəstindən istifadə etməklə işlənmiş şəkil, sayı eni və hündürlüyün hasilinə bərabər olan bütün piksellərin eni, hündürlüyü və rəngi haqqında məlumatla xarakterizə olunur. Tipik olaraq, proqram gd kitabxanası ilə qarşılıqlı əlaqəni ya yeni boş şəkil yaratmaqla (çizmək və çəkmək üçün) və ya fayldan şəkil idxal etməklə başlayır. Adətən aşağıdakı addımlar yerinə yetirilir: birincisi, təsvirdə rənglərin paylanması, ikincisi, bəzi digər əməliyyatlardan istifadə edərək təsvirin çəkilməsi və rənglənməsi və ya manipulyasiyası, üçüncüsü, təsvirin ümumi qəbul edilmiş formata (məsələn, PNG və ya JPEG ) çevrilməsi və təyinat yerinə köçürün.

Rənglərin təmsili

gd şəkillərində rəngləri təmsil etməyin iki yolu var: 256 rənglə məhdudlaşan palitraya əsaslanan təqdimat və müxtəlif RBG rəng nömrələrinin ixtiyari sayını təyin etməyə imkan verən həqiqi rəng təqdimatı. gd 1.x-də yeganə seçim palitraya əsaslanan rənglərdən istifadə etmək idi, lakin gd 2.x-də və bu kitabxananın PHP-yə daxil olan versiyasında həm palitraya əsaslanan şəkillər, həm də real rənglərdə şəkillər yaratmaq mümkündür. Yadda saxlamaq lazım olan bir şey odur ki, hər hansı bir gd təsviri ya palitraya əsaslanmalıdır, ya da həqiqi rənglərə (RGB) malik olmalıdır; bu o deməkdir ki, palitraya əsaslanan şəkillərə real rənglər təqdim etmək imkanı yoxdur.

Palitraya əsaslanan orijinal boş təsviri əldə etmək üçün ImageCreate() funksiyasına zəng etməli və təsviri həqiqi rənglərdə əldə etmək üçün ImageCreateTrueColor() funksiyasından istifadə etməlisiniz.

Palitraya əsaslanan şəkillər

Rənglər Qırmızı-Yaşıl-Göy (RGB) formatında, 0-dan 255-ə qədər üç rəqəmdən istifadə etməklə müəyyən edilir. Məsələn, rəqəmlərlə göstərilən rəng (255, 0, 0) parlaq qırmızı, rəng ( 0, 255, 0) - yaşıl, rəng (0, 0, 255) - göy, rəng (0, 0, 0) - qara, rəngli (255, 255, 255) - ağ və rəngli (127, 127, 127) - boz. Getdikcə daha çox yeni rəng yaratmaqla, üç rəng komponentinin dəyərlərini özbaşına seçə bilərsiniz.

Şəkil üzərində hər hansı bir rəsm müəyyən bir rənglə aparılmalı və rənglər istifadə edilməzdən əvvəl təsvirdə paylanmalıdır. Əlavə olaraq, şəkildə paylanan ilk rəng avtomatik olaraq fon rənginə çevrilir. Beləliklə, heç bir halda rəngləri göstərmədən edə biləcəyinizi düşünməməlisiniz və adətən rənglərin paylanması əməliyyatı yeni bir boş görüntü yaratdıqdan sonra ilk əməliyyatdır.

Palitraya əsaslanan şəkillərdəki rənglər imagecolorallocate() funksiyasından istifadə etməklə yaradılır, o, parametr kimi təsviri (əvvəllər yaradılmış) və qırmızı, yaşıl və mavi nisbətini təyin edən üç tam ədədi götürür. Qaytarılan dəyər şəklin daxili palitrasında yeni rəngin indeksini təyin edən tam ədəddir. Bu qaytarma dəyəri dəyişənə təyin edilməlidir, çünki göstərilən indeks dəyəri bu rəngdən istifadə edərək bütün gələcək əməliyyatları yerinə yetirmək üçün lazımdır.

Palitraya əsaslanan şəkillərin maksimum rəng sayı 256 ola bilər. (Oxucu bu cür şəkillərin əslində nəyə əsaslandığı ilə maraqlana bilər və ya olmaya bilər, lakin palitraya əsaslanan təsvirdəki hər piksel əslində indeksi saxlayan bir baytdır. 256 rəng palitrasında bir elementdən ibarətdir.)

Qeyd edək ki, şəkildəki rənglərdən birini paylayan zaman qaytarılan indeks yalnız həmin şəkil üçün məna daşıyır. Məsələn, əgər PHP skripti bir təsvirdə paylanmış rəngə $black təyin edirsə, o zaman həmin dəyişəni başqa bir təsviri emal etmək üçün çağırılan rəsm əmrinə rəng daxiletməsi kimi istifadə etməyin mənası yoxdur.

Real rənglərlə şəkillər

gd 2.0 və sonrakı versiyalar, həmçinin hər pikselin ixtiyari RGB rəng nömrəsini saxladığı palitraya əsaslanmayan şəkillər yaratmaq imkanı verir. Əsl rəng adlanan bu formatda mümkün rənglərin sayı olduqca böyükdür. Bu xüsusiyyət təkcə bədii ifadənin əhatə dairəsini hədsiz genişləndirmir, həm də gd alət dəstindən istifadə edərək yaddaşa yüklənmiş həqiqi rənglərlə PNG və JPEG şəkillərini sədaqətlə təkrar istehsal etməyə imkan verir.

İlkin təsviri yaratmaq üçün fərqli funksiyadan istifadə edilməsi və müxtəlif rənglərin seçilməsi ilə bağlı heç bir məhdudiyyətin olmaması istisna olmaqla, həqiqi rəngli şəkillərlə işləmə prinsipləri palitraya əsaslanan şəkillərlə eynidir.

Xüsusilə, siz hələ də yeni rənglər yaratmaq üçün ImageColorAllocate() funksiyasına zəng edə və sonradan rəsm əmrlərində istifadə etmək üçün dəyişənə qaytarma dəyəri təyin edə bilərsiniz. Yeganə fərq ondadır ki, qaytarılan dəyər palitradakı elementin indeksi deyil, RGB rəng nömrəsidir. Bundan əlavə, real rənglərə malik şəkillərdə ImageColorAllocate() funksiyasının yan effekti kimi yaradılmış fon rəngi anlayışı yoxdur; İnisializasiya nəticəsində bütün piksellərə qara təyinat verilir (0, 0, 0).

Şəffaflıq

gd 2.x versiyaları şəffaflıq konsepsiyasını dəstəkləyir. Bu, rəngin nə qədər şəffaf olduğunu göstərmək üçün alfa kanalından (qırmızı, yaşıl və mavi dəyərlərə əlavə olaraq) istifadə edir. Bu, məsələn, bir formanı digərinin üzərinə qoymağa imkan verir ki, birinci forma ikinci ilə tamamilə üst-üstə düşməkdənsə, qismən görünən qalsın.

PHP-də şəkillərlə işləmək üçün bir çox funksiyaların adında "alfa" sözünü ehtiva edən analoq var ki, bu da bu funksiyalarda rəngin dörd dəyərlə (R, G, B, A) təmsil olunduğunu göstərir. Məsələn, imageColorAllocate() funksiyası üç parametr qəbul edir və ImageColorAllocateAlpha() funksiyasını çağırarkən siz 0-dan 127-dək dəyəri olan dördüncü parametri təyin etməlisiniz. Sıfır dəyəri rəngin tamamilə qeyri-şəffaf olduğunu, dəyəri isə onu göstərir. 127 rəngin tamamilə qeyri-şəffaf olduğunu göstərir

Koordinatlar və rəsm əmrləri

gd alətlər dəstindən istifadə edərək şəkil yaratdıqdan sonra onun daxilində rəsm əmrlərini təyin etməyə imkan verən koordinat sistemi gizli şəkildə yaradılır. Bu sistemdə məhdudlaşdırıcı koordinat dəyərləri təsvirin eni və hündürlüyünün müəyyən edilmiş parametrləri ilə müəyyən edilir.

Bu sistemdə koordinatlara (0, 0) uyğun gələn koordinatların mənşəyi təsvirin yuxarı sol küncündə yerləşir. X dəyərləri üçün müsbət istiqamət soldan sağa, Y dəyərləri üçün isə yuxarıdan aşağıya doğrudur. (Kompüter qrafikası koordinat sistemlərində mənşənin bu yeri adi haldır, lakin analitik həndəsəni öyrənənlər mənşəyin diaqramın aşağı sol küncündə olmasına öyrəşmiş kimi görünürlər.)

Rəsm əmrlərinin sayı çox böyükdür. Bu əmrlərə xətt seqmentlərinin, düzbucaqlıların və qövslərin çəkilməsi əmrləri, həmçinin xüsusi piksel qiymətlərinin təyin edilməsi əmrləri daxildir, lakin bunlarla məhdudlaşmır. Ancaq unutmayın ki, bütün bu rəsm və planlama əmrlərinin son nəticəsi piksel dəyərlərini təyin etməkdir. Piksel dəyərlərini dəyişdirən əmrləri yerinə yetirdikdən sonra yaddaşda heç bir iz qalmır (dəyişdirilən dəyərlərin özündən başqa), buna görə də rəsm və planlama əmrlərini ləğv etmək və ya müxtəlif əmrlərin nəticələrini ayrıca təqdim etmək üçün heç bir yol yoxdur.

Göstərilən təsvirdən kənara çıxan rəsm əmrlərinin qarşısını almaq üçün heç bir şey yoxdur, lakin belə təsvirin görünən təsiri yoxdur. Məsələn, bütün koordinat dəyərləri mənfi olarsa, düzbucaqlı şəkildə görünməyəcək.

Format çevrilməsi

Bütün rəsm və təsvir manipulyasiya əməliyyatları daxili gd formatında təmsil olunan təsvir üzərində yerinə yetirilir. Və bu əməliyyatlar başa çatdıqdan sonra skript bu təsviri lazımi qrafik formata çevirmək və istifadəçinin brauzer pəncərəsinə (və ya fayla) çıxarmaq üçün konversiya və çıxış əmrlərindən birini (imagepng, imagetjpeg və s.) çağıra bilər.

Resursların boşaldılması

Tamamlanmış gd şəklinin çevrilməsinin nəticəsi istifadəçiyə ötürüldükdən sonra daxili versiya ilə işin tamamlandığını hesab edə bilərik. Bu o deməkdir ki, bu versiya məhv edilməlidir. Bunun düzgün yolu imagedestroy() funksiyasını parametr kimi təsvirlə çağırmaqdır.

gd kitabxana funksiyaları

Biz bu məqalədə PHP tərcüməçisinin gd interfeysində təqdim olunan bütün funksiyaları ayrıca sadalamaq və təsvir etmək niyyətində deyilik. Bu məlumatla tanış olmaq üçün php.net təlimatının “Şəkillərin işlənməsi və yaradılması” bölməsindən istifadə etməyi tövsiyə edirik. Əksər gd funksiyaları aşağıdakı cədvəldə göstərilən kateqoriyalardan birinə düşür. Nəzərə alın ki, bu cədvəldə sadalanan funksiya adları hər bir sözün ilk hərfinin oxunmasını asanlaşdırmaq üçün böyük hərflə yazılıb, lakin kod nümunələrində bu şərt həmişə müşahidə edilmir, çünki PHP funksiya adları böyük hərflərə həssas deyildir:

gd funksiyalarının təsnifatı Nümunə qeydini yazın
Şəkil yaratma funksiyaları ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Yeni gd şəklini qaytarın. ImageCreate() funksiyası parametr kimi şəklin eni və hündürlüyünü götürür, digər funksiyaların parametrləri isə fayl yolu, URL və ya yüklənərək gd formatına çevrilməli olan əvvəllər yaradılmış təsviri ehtiva edən sətirdir.
Rəng paylama əməliyyatlarını yerinə yetirən funksiyalar ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() ImageColorAllocate() funksiyası parametrlər kimi şəkil tutucunu və tələb olunan qırmızı, yaşıl və mavi dəyərləri götürür və sonra rəsm və qrafik əməliyyatlarında daha sonra istifadə etmək üçün rəng nömrəsini qaytarır. ImageColorAllocateAlpha funksiyası əlavə parametr qəbul edir - şəffaflıq əmsalı (0-127)
Rəng uyğunlaşdırma əməliyyatlarını yerinə yetirən funksiyalar ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Palitralı şəkildəki uyğun rəngin indeksini qaytarın. Adında "Ən yaxın" sözünü ehtiva edən funksiyalar ən çox uyğun gələn rəngi qaytarır (uyğunluq dəqiqliyi RGB dəyər məkanında nöqtələr arasındakı məsafə kimi ölçülür); "Dəqiq" təyinatlı funksiyalar rəng nömrəsini yalnız axtarılan ilə eyni olduqda qaytarır, əks halda -1 dəyərini qaytarır, "Alpha" adlı funksiyalar dörd dəyərdən istifadə etməklə müəyyən edilən rənglər üzərində işləyir (ilə şəffaf rənglər)
Xətt çəkmə funksiyaları ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Onlar müəyyən formanın düz seqmentlərini və ya əyrilərini çəkmək üçün istifadə olunur. Tipik olaraq, bu funksiyaların hər birinin birinci parametri şəkil, sonuncu parametr rəng, aralıq parametrləri isə X və Y koordinatlarıdır.
Xətt qələminin parametrləri ImageSetStyle(), ImageSetThickness() Sonrakı xətt çəkmə əmrləri tərəfindən yaradılan xətlərin xüsusiyyətlərinə təsir edən parametrləri dəyişdirin (bu funksiyaların bəziləri yalnız gd 2.0.1 və ya sonrakı versiyalara aiddir)
Rəsm və doldurma funksiyaları ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Bir qayda olaraq, onlar xətlərin çəkilməsi üçün müvafiq funksiyalara bənzəyir, lakin onlar yalnız sahələrin konturlarını çəkmək üçün deyil, həm də yaradılmış sahələri rənglə doldurmağı təmin edir. ImageFill() xüsusi funksiyası müəyyən edilmiş doldurma rəngindən istifadə edərək doldurma əməliyyatını yerinə yetirir. Doldurma göstərilən XY koordinatlarından başlayaraq bütün istiqamətlərdə aparılır (bu funksiyalardan bəziləri gd 2.0.1 və ya daha sonrakı versiyaları tələb edir)
Mətnlə işləmək üçün funksiyalar ImageString(), ImageLoadFont() ImageString funksiyası parametrlər kimi şəkil tutacaqını, şrift nömrəsini, X və Y koordinatlarını, mətn sətirini və rəngi götürür. Şrift nömrəsi 1 ilə 5 arasındadırsa, xətti bu rəngdə göstərmək üçün beş daxili şriftdən biri istifadə olunur. Digər tərəfdən, 5-dən böyük şrift nömrəsi ImageLoadFont() funksiyasından istifadə edərək xüsusi şriftin yüklənməsinin nəticəsini göstərir.
İxrac funksiyaları ImagePng(), ImageJpeg() Daxili gd şəklini uyğun formatın şəklinə çevirin və sonra bu görüntüyü çıxış axınına göndərin. Yalnız bir parametr göstərilibsə (şəkil sapı), o zaman şəkil istifadəçiyə əks-səda verilir və fayl yolu olan əlavə parametr istifadə edilərsə, çıxış axınının təyinatı fayl olur.
Şəklin məhv edilməsi funksiyası ImageDestroy() Parametr kimi şəkil idarəsini götürür və təsvirlə əlaqəli bütün resursları buraxır
HTTP şəkil dəstəyi

Şəkilin istifadəçinin brauzerində düzgün təqdim olunması üçün şəklin haradan gəlməsini və hansı formatda olduğunu dəqiqləşdirmək lazımdır. Buna görə də, təəssüf ki, sadəcə olaraq, məsələn, yaradılan HTML faylında imageToPng() funksiyasına çağırışı həyata keçirmək və bununla da şəklin göstərilməsi problemini həll etmək mümkün deyil. Əsasən, siz PHP skriptində yaradılan HTML kodu ilə təsvirin çıxış kodunu alternativ etməlisiniz və bunun üçün aşağıda təsvir edilən üç seçimdən birini istifadə edə bilərsiniz.

Tam Səhifə Şəkillərinin Yaradılması

Yaradılan bütün səhifəni şəkil kimi formatlaşdırmaq olar. Bu halda, siz HTTP başlığını şəkil məlumatından əvvəl ötürməlisiniz və bununla da sonrakıların müəyyən tipli bir şəkil olduğunu bəyan etməlisiniz. Məsələn, skriptin sonunda aşağıdakı sətirlər verilə bilər:

// ... şəkil yaradan və onu // dəyişəninə təyin edən kod $image header("Content-type: image/png"); // Başlığı brauzerdə göstər imagepng($image); // PNG formatına çevrilmiş şəklin özünün verilənlərini ötürün imagedestroy($image); // Resursları buraxın

Bu yanaşmanın üstünlüyü ondan ibarətdir ki, istənilən məlumat, o cümlədən POST parametrləri gələcək təsvirin tərkibi haqqında təlimatları çatdırmaq üçün istifadə edilə bilər. İşin mənfi tərəfi odur ki, yaranan səhifədə hər hansı adi HTML kodu ola bilməz. Əslində, hətta skriptlərdə başlıq və təsvirdən əvvəl heç bir mətn çıxışı göndərməmək üçün diqqətli olmalısınız, çünki bu, məzmunu vaxtından əvvəl göndərməyə bərabərdir. Bu halda, "Başlıqlar artıq göndərildi..." səhv mesajı görünür.

Fayllarda saxlanılan şəkillərin yerləşdirilməsi

Əvvəlcə qeyd edək ki, HTML deskriptoru dəstəkləyir , bu, aşağıdakı nümunədə olduğu kimi, şəkil faylının yolunu və ya URL-ni göstərərək şəkli yerləşdirməyə imkan verir:

Bu dizayn statik şəkil fayllarına aiddir, lakin onun yeni yaradılmış təsvirin daxil edilməsini aktivləşdirə bilməməsi üçün heç bir səbəb yoxdur. Buna görə də, bir skript hazırlaya bilərsiniz ki, orada bir şəkil əvvəlcə yaradılır, sonra şəkil məlumatı yerli fayla yazılır və sonra müvafiq deskriptoru olan HTML kodu yaradılır. , yeni yaradılmış fayla işarə edir.

Bu yanaşmanın yeganə çatışmazlıqları ondan ibarətdir ki, birincisi, səhifə yaratma prosesinə fayl yazıları daxil olmalıdır, bu, çox vaxt apara bilər, ikincisi, siz faylları istifadə etdikdən sonra onlarla nə edəcəyinizi müəyyənləşdirməlisiniz.

Ancaq müəyyən bir vəziyyətdə bu yanaşma idealdır. Söhbət sonlu seçim dəstini təmsil edən şəkillərin yaradılması və keşləşdirilməsindən gedir. Bu halda, müəyyən bir vəziyyəti şəkil faylının adı ilə əlaqələndirməyin xüsusi bir yolu var. Təsvirin çıxarılmasını tələb edən bu vəziyyətlərdən bəziləri yarandıqda, müvafiq faylın artıq mövcud olub-olmaması yoxlanılır. Cavab müsbət olarsa, bu fayla keçid sadəcə tətbiq edilir, deskriptor kimi formatlanır , və əgər cavab yoxsa, o zaman şəkil yaradılır, fayla yazılır və sonra yenidən bu şəkilə keçid tətbiq edilir. Nəhayət, yeni fayllar yaratmaq sadəcə lazım olmayacaq.

Skriptlərdə yaradılan şəkillərin yerləşdirilməsi

Nəhayət, müstəqil bir şəkil skripti təqdim edə bilməməyiniz üçün heç bir səbəb yoxdur və nəticədə təsviri deskriptorda göstərərək başqa bir skript tərəfindən yaradılan dinamik səhifəyə yerləşdirə bilməzsiniz. Bu skriptin URL-i. Yeganə çətinlik, lazımi məlumatların asılı səhifəyə necə köçürüləcəyini seçməkdir. Məsələn, daxili təsviri göstərən tutacaq belə görünə bilər:

Bu halda ballpage.php skripti şəkildəki müxtəlif mövqelərdə yerləşən rəngli topların PNG şəkillərini qaytarır.

Lakin bu yanaşmadan istifadə problemlər yarada bilər, çünki veb serverlər və brauzerlər bəzən işlənən faylların şəkilçilərini yoxlayır və yoxlamanın nəticələrini aldıqda onlara fərqli reaksiya verirlər. Məsələn, ballpage render skriptinə .php genişlənməsi tələb oluna bilər ki, Apache serveri server kodunun PHP kodu kimi şərh edilməli olduğunu müəyyən edə bilsin (baxmayaraq ki, tələb olunan emal rejimi konfiqurasiya faylları vasitəsilə də müəyyən edilə bilər).

Bununla belə, brauzerlərin qeyri-standart versiyaları da var ki, onlar .php uzantılı faylın şəkil yaratma ehtimalını nəzərə almır, baxmayaraq ki, ötürülən başlıq şəklin izləndiyini göstərir. Buna görə də, bu üsuldan istifadə edərkən, müxtəlif brauzerlərdə skriptləri sınaqdan keçirməli və nəzərdə tutulan istifadəçilər dairəsinin səhifələri sizin nəzərdə tutduğunuz formada alacağına əmin olmalısınız.

Aşağıda şəkillər yaratmaq üçün gd kitabxanasından istifadə nümunələri verilmişdir.

gd kitabxanasından istifadə nümunəsi: sadə formaların yaradılması

Aşağıdakı nümunədə gd kitabxanasından sadə həndəsi fiqurlardan ibarət rəsm yaratmaq üçün necə istifadə edəcəyimizi göstərəcəyik:

Nə dəyişmişik?
  • İndi bir neçə növ diaqramımız olduğundan, qrafikin növü $_GET vasitəsilə bizə ötürüləcək. $Month və $Hour və $Year ilə eyni;
  • Sonra ayların adlarını ehtiva edən $MonthNames massivi yaradırıq. Massiv sıfırdan başladığı üçün birinci element sıfırdır;
  • İndi növdən asılı olaraq, keçiddə $Query, $ResultArray, $ChartHeading və $XAsixName dəyişənləri təyin edilir. Əgər $Type təyin edilməyibsə, defolt olaraq aylar göstəriləcək;
  • Sonra verilənlər bazasına qoşuluruq, sorğunu yerinə yetiririk, nəticəni massivə köçürür və xml faylının birinci hissəsini yaradırıq;
  • Sonra, XML faylının gövdəsini yaradırıq. Bədən diaqram tipindən asılı olduğundan, biz yenidən keçiddən istifadə edirik;
  • Aylar: linkdən başqa hər şey eynidir. İndi bu belə olacaq: newchart-xmlurl-get-data.php; newchart - yeni diaqram yaratdığımızı göstərir, xmlurl - verilənləri hansı ünvanda axtarmaq lazımdır. Aşağıdakı hər şey URL-in bir hissəsidir. Yanvar ayına tam keçid: newchart-xmlurl-get-data.php?type=hourly&Year=2010&Month=1
  • Günlər: ay üçün də eynidir, lakin URL indi günlərlə bağlı məlumatları ehtiva edir;
  • Saat: başqalarının bu diaqramı izləməsini istəmiriksə, sadəcə olaraq onun üçün URL təyin etmirik;
  • Ən sonunda XML-i bağlayın;

Bu faylı get-data.php kimi yadda saxlayın; İndi brauzerinizi açın və skripti sınayın. Məsələn: http://localhost/fcdemo/get-data.php?year=2010

Bunun kimi bir şey görməlisiniz:

Test

İndi diaqramlarla tamamilə bitirdik. Əməliyyatı yoxlamaq üçün http://localhost/fcdemo/demo.html ünvanına keçin

Hər şeyi düzgün etmisinizsə, səhifədə Column3D diaqramını görəcəksiniz. Sütunlardan birini klikləsəniz, yeni diaqram açılacaq. Və sair…

Nəticə

Bu dərsi diqqətlə öyrənmisinizsə, çox güman ki, PHP/MySQL-də əlaqəli diaqramlar haqqında ümumi anlayışınız var. Aşağıdakı statistikalar üçün də eyni diaqramlar hazırlana bilər:

  • Müəyyən müddət ərzində satışların sayı;
  • Veb saytınız neçə dəfə fəaliyyətini dayandırıb?
  • Fərdi səhifəyə daxil olanların sayı;

Diaqramın strukturu istənilən mövzu üçün eyni olacaq. Verilənlər bazasından məlumat almaq üçün bəzi parametrlərdən istifadə edin, sonra cavabı XML-ə çevirin və budur, diaqram hazırdır!

Daha çox ilham almaq üçün bu demo səhifəsinə baş çəkə bilərsiniz. Diqqətinizə görə təşəkkürlər!