GD kutubxonasidan foydalanib grafik yaratish. PHP da grafiklarni chizish Biz nimani o'zgartirdik

Veb-stsenariylarda grafik vositalardan foydalanishni aniqlash uchun quyidagi grafik foydalanish holatlarini ko'rib chiqing:

  • Mustaqil ravishda yaratilgan yoki biror joydan olingan statik tasvirlar HTML sahifasiga kiritilishi mumkin.
  • Dasturiy ravishda yaratilgan tasvirlardan (HTML + CSS) foydalanish mumkin.
  • Skriptni bajarish jarayonida yuzaga keladigan barcha mumkin bo'lgan holatlar uchun oldindan statik grafiklarni yaratish, ularni fayllarda saqlash va ularni shartli ko'rsatish uchun gd kutubxonasidan foydalanishingiz mumkin.

Grafiklarni statik tasvirlardan foydalangan holda amalga oshirish variantini soddaligi tufayli ko'rib chiqmaymiz, shuning uchun avval oddiy variantni (HTML + CSS grafiklari) ko'rib chiqamiz, keyin esa PHP da gd kutubxonasidan foydalanishni ko'rib chiqamiz.

Grafika HTML + CSS

Veb-saytga tashrif buyuruvchilar, ayniqsa, so'rov natijalarini ko'rsatish uchun ishlatiladigan rangli tomonlari bo'lgan gorizontal chiziqli grafiklarni yaxshi bilishadi. Bir qarashda, bunday diagrammalarni yaratish uchun qandaydir grafik vositalardan foydalanilganga o'xshaydi, lekin aslida bir nechta oddiy skriptlardan foydalanish kifoya:

PHP, HTML, CSS da grafiklar bilan ishlash /* dizaynni tashkil etuvchi CSS uslublari */ body div (balandlik: 1em; displey: inline-block; vertical-align: middle ) span (displey: inline-block; width: 120px ) .apelsin (fon: apelsin) .olma (fon: #33CC66 ) .banan (fon: sariq ) .pomidor (fon: qizil ) .bodring ( fon: yashil ) .kartoshka ( fon: kulrang ) Buyurtma shakli Mevalar Apelsinlar Olmalar bananlar Sabzavotlar Pomidor Bodring Kartoshka

Bu misol PHP ning hech qanday yangi xususiyatlarini namoyish etmaydi, balki HTML va CSS dan foydalangan holda grafik yaratishning oddiy usulini ko'rsatadi (bu holda satrli diagrammalar):

gd kutubxonasi

Oldingi bo'limda tasvirlangan grafik vositalar standart HTML kodining imkoniyatlarini amalda tugatadi (shuni ta'kidlash kerakki, biz HTML5 Canvas grafik yaratish uchun juda kuchli vositani qamrab olmaganmiz). Endi gd kutubxonasidan foydalanib, chinakam ixtiyoriy grafiklarni yaratish usullarini tavsiflashga o'tamiz.

gd kutubxonasining umumiy tavsifi

Umuman olganda, gd asboblar to'plami tasvirlarni yaratish va boshqarish uchun C kodining kutubxonasidir. Ushbu kutubxona dastlab Boutel.com saytining iqtidorli va saxovatli xodimlari tomonidan ishlab chiqilgan va ommaga taqdim etilgan.

gd kutubxonasining o'zi grafik yoki chizmachilik dasturi emas, u mustaqil dastur yoki grafik foydalanuvchi interfeysini tashkil etmaydi. Buning o'rniga, gd kutubxonasi istalgan tasvirni manipulyatsiya qilish uchun har qanday dastur tomonidan chaqirilishi mumkin bo'lgan funktsiyalarni taqdim etadi. Bu shuni anglatadiki, gd kutubxonasi ushbu kutubxonaning kodidan foydalanish kerak bo'lgan har qanday C dasturiga ulanishi mumkin. Aynan shu muammoni PHP tizimini ishlab chiquvchilar hal qilishdi.

Aslida, bu maqsadda PHP skriptidan gd protseduralarini chaqirishni osonlashtiradigan interfeys funktsiyalari to'plami yozilgan. Ammo gd kutubxonasining o'zi PHP-ga xos kodni o'z ichiga olmaydi va kutubxonaga Perl, Paskal, Haskell va REXX kabi boshqa dasturlash tillari va dasturlash muhitlaridan kirish imkonini beruvchi interfeyslar ishlab chiqilgan.

Gd kutubxonasi sizga manba tasvirlarini yaratish (dastlab bo'sh, bo'sh qog'oz varag'iga o'xshash) funktsiyalarini chaqirish imkonini beradi, turli usullar bilan ushbu manba tasvirlarini chizish va chizish va natijada tasvirni gd ichki tasvir formatidan standartga aylantirish imkonini beradi. tasvir formatini tanlang va so'ng uni yakuniy manzilga yuboring (brauzer oynasida chiqarish yoki fayl yoki ma'lumotlar bazasida saqlash). Va bu operatsiyalarning barchasi dastur nazorati ostida amalga oshirilganligi va qo'lda bajarilmaganligi sababli, yaratilgan tasvirlar kerakli darajada murakkab bo'lishi mumkin va dasturni bajarish jarayonida ularni bog'liq qilish maqsadga muvofiq bo'lgan har qanday holatlarga bog'liq bo'lishi mumkin.

Rasm formatlari

Gd kutubxonasi asosan turli formatlardan foydalangan holda tasvirlarni import va eksport qilish imkonini beradi. Eng mashhur rasm formatlari GIF, JPEG va PNG hisoblanadi, ammo misollar asosan ikkinchisidan foydalaniladi.

GIF va PNG formatlari ba'zi qo'shimchalar bilan piksellarga mos keladigan rangli elementlarning panjarasini tasvirlash uchun mo'ljallangan. Birinchi qo'shimcha hujayralar rang raqamlari jadvaliga haqiqiy rang raqamlari yoki indekslarni o'z ichiga olishi mumkin. (Birinchi variant sizga yanada ifodali tasvirlarni yaratishga imkon beradi, chunki u istalgan sonli turli xil ranglarni taqdim etishga imkon beradi, oxirgi variant esa yanada ixcham tasvirlarni yaratishga yordam beradi.)

Ikkinchi qo'shimcha quyidagicha. Albatta, GIF va PNG formatlarining kontseptual ko'rinishi juda oddiy, ammo amalda bu formatlardagi tasvirlarni o'qish, yozish va uzatish har doim siqilgan shaklda amalga oshiriladi. Siqish zarur, chunki hujayralar tarmog'i sifatida taqdim etilgan ma'lumotlarni saqlash katta hajmdagi xotirani talab qiladi. Oddiy 500x400 pikselli tasvir 200 000 pikselni o'z ichiga oladi va agar har bir piksel uchun uch bayt kerak bo'lsa, talab qilinadigan xotira miqdori allaqachon yarim megabaytdan oshadi.

Siqish mavzusi keng va murakkab mavzudir, lekin ko'pchilik siqish algoritmlari uning hajmini kamaytirish uchun tasvirning ortiqcha miqdorini kamaytirishga asoslangan. (Masalan, har bir piksel uchun yashil qiymatni alohida belgilashdan ko'ra, tasvirdagi har bir piksel yashil ekanligini aniqlash uchun xotirada kamroq joy kerak bo'ladi.) Afsuski, siqish algoritmlari bu xususiyatlardan foydalanishga tayanmaydi, chunki ular shunday qaror qabul qilishlari kerak. GIF formatidagi tasvirlarni yaratish uchun ishlatiladigan siqish algoritmida amalga oshirilgan ushbu muammolarni hal qilish usullari hatto patentlangan murakkab muammolar.

Kutubxonani o'rnatish

Ochig'ini aytganda, gd kutubxonasini o'rnatish va uni PHP tizimi bilan birgalikda muvaffaqiyatli ishlashini ta'minlash vazifasi ancha murakkab. Bu PHP yoki gd dasturiy ta'minotidagi kamchiliklar tufayli emas, balki butunlay konfiguratsiya muammolari bilan bog'liq; xususan, gd kutubxonalari qayerda bo'lishi kerakligini va aslida qaerda ekanligini tushunishingiz va barcha bajariladigan fayllarni kompilyatsiya qilish va bog'lash bosqichlari to'g'ri bajarilishini ta'minlashingiz kerak. Shuning uchun, eng yaxshi vaziyat shundan iboratki, foydalanuvchi gd kutubxonasi allaqachon o'rnatilganligini va PHP tizimida gd qo'llab-quvvatlashi allaqachon yoqilganligini aniqlaydi (veb xosting kompaniyasining ruxsati bilan yoki u o'rnatilgan PHP tizimiga kiritilganligi sababli).

Shuning uchun, gd kutubxonasini o'rnatish nol bosqichdan boshlanishi kerak - bu kutubxona allaqachon o'rnatilganligini tekshirish orqali. Birinchidan, skript faylingizga quyidagi kodni kiriting va brauzeringizda uni ishga tushirish natijalarini ko'ring, skriptlaringiz veb-xosting kompaniyangiz tomonidan boshqariladimi yoki butunlay o'zingizning o'rnatishingiz bilan ishlaydi:

Ushbu sahifani ekranda ko'rsatgandan so'ng, brauzer oynasida "gd" matn qatorini qidiring. Bu sizning PHP o'rnatishingiz gd kutubxonasini qo'llab-quvvatlash imkonini beradigan darajada tavsiflovchi kichik bo'limni ko'rsatishi kerak. Agar siz faqat ma'lum turdagi tasvirlarni (masalan, PNG) tayyorlamoqchi bo'lsangiz va phpinfo() funksiyasi natijalari ushbu turdagi tasvirni qo'llab-quvvatlash yoqilganligini ko'rsatsa, darhol boshlashingiz mumkin. Va agar gd versiyasi ma'lumotida "to'plam" so'zi bo'lsa, u holda PHP bilan birga kelgan gd kutubxonasi ishlatiladi.

Agar gd kutubxonasi haqida eslatma topishga urinish muvaffaqiyatsiz tugasa va siz PHP ni o'zingiz o'rnatayotgan bo'lsangiz, gd kutubxonasi konfiguratsiyasini o'rnatishingiz va sozlashingiz mumkin. (Boshqa tomondan, agar sizning PHP-ni o'rnatishingiz hosting kompaniyangiz tomonidan amalga oshirilsa, sizning yagona variantingiz - bu kompaniyadan gd kutubxonasini qo'llab-quvvatlashni so'rash yoki boshqa veb-xosting kompaniyasidan foydalanish.)

PHP bilan birga kelgan gd kutubxonasidan foydalanish gd ni o'rnatish bilan bog'liq ko'plab muammolarni bartaraf qiladi, lekin hammasi emas. Gap shundaki, tarqatish to'plamiga kiritilgan versiyaning o'zidan foydalanish gd kutubxonasini olish imkonini beradi, lekin gd ishlashi uchun zarur bo'lgan barcha kutubxonalarni olish shart emas. Gd kutubxonasining o'zi bir nechta boshqa kutubxonalarga bog'liq: libpng (PNG rasmlarni boshqarish uchun), zlib (siqish uchun) va jpeg-6b yoki undan keyingi (kerak bo'lsa, JPEG tasvirlarni boshqarish uchun). Bu kutubxonalar allaqachon koʻpgina Linux oʻrnatmalarida mavjud boʻlib, u holda oʻrnatish katalogini koʻrsatmasdan, kerakli opsiyani (masalan, --with-zlib) opsiyalarga kiritish kifoya. Agar siz PHP konfiguratsiyasini o'zingiz qilsangiz, gd ning kiritilgan versiyasi bajariladigan faylga kiritilganligiga ishonch hosil qilish uchun --with-gd variantini qo'shishingiz mumkin. Va agar siz boshqa versiyaga ishora qilmoqchi bo'lsangiz, uning o'rniga --with-gd=path opsiyasidan foydalaning.

Agar siz bir yoki bir nechta talab qilinadigan kutubxonalar yo'qligini aniqlasangiz, bu kutubxonalarni alohida qurish kerakligini anglatadi. Joriy versiyalarni qaerdan topish haqida ma'lumot olish uchun www.libgd.org saytida joylashgan hujjatlarni ko'rib chiqishni boshlashingiz mumkin.

gd kutubxonasi bilan ishlashning asosiy tamoyillari

Tasvir gd asboblar to'plamidan foydalangan holda yaratilgan yoki manipulyatsiya qilinganda, tasvir hech qanday an'anaviy tasvir turiga mos kelmaydigan maxsus gd formatida taqdim etiladi. Nazariy jihatdan bu gd formatidagi tasvirlarni eksport qilish mumkin, ammo bunday operatsiya kamdan-kam qo'llaniladi, chunki natijada olingan tasvir siqilmaydi va brauzer yoki oddiy grafik dasturda ko'rsatilmaydi.

Gd asboblar to'plamidan foydalangan holda qayta ishlangan tasvir barcha piksellarning kengligi, balandligi va rangi haqidagi ma'lumotlar bilan tavsiflanadi, ularning soni kenglik va balandlikning mahsulotiga teng. Odatda, dastur gd kutubxonasi bilan o'zaro aloqasini yangi bo'sh rasm yaratish (chizish va chizish uchun) yoki fayldan rasmni import qilish orqali boshlaydi. Odatda quyidagi bosqichlar amalga oshiriladi: birinchidan, tasvirdagi ranglarni taqsimlash, ikkinchidan, boshqa operatsiyalar yordamida rasmni chizish va bo'yash yoki manipulyatsiya qilish, uchinchidan, tasvirni umumiy qabul qilingan formatga (masalan, PNG yoki JPEG ) aylantirish va uni belgilangan joyga o'tkazing.

Ranglarning ifodalanishi

Gd tasvirlarida ranglarni ifodalashning ikkita usuli mavjud: 256 rang bilan cheklangan palitraga asoslangan tasvir va turli RBG rang raqamlarining ixtiyoriy sonini belgilash imkonini beruvchi haqiqiy rang tasviri. gd 1.x da yagona variant palitraga asoslangan ranglardan foydalanish edi, lekin gd 2.x va ushbu kutubxonaning PHP bilan kiritilgan versiyasida palitraga asoslangan tasvirlarni ham, real ranglardagi tasvirlarni ham yaratish mumkin. Shuni yodda tutish kerakki, har qanday gd tasviri palitraga asoslangan yoki haqiqiy ranglarga (RGB) ega bo'lishi kerak; bu palitraga asoslangan tasvirlarga real ranglarni kiritish imkoniyati yo'qligini anglatadi.

Palitraga asoslangan asl bo'sh tasvirni olish uchun siz ImageCreate() funksiyasini chaqirishingiz kerak va tasvirni haqiqiy ranglarda olish uchun ImageCreateTrueColor() funksiyasidan foydalaning.

Palitraga asoslangan rasmlar

Ranglar qizil-yashil-ko'k (RGB) formatida 0 dan 255 gacha bo'lgan uchta raqam yordamida ko'rsatilgan. Masalan, raqamlar bilan ko'rsatilgan rang (255, 0, 0) yorqin qizil, rang ( 0, 255, 0) - yashil, rang (0, 0, 255) - ko'k, rang (0, 0, 0) - qora, rangli (255, 255, 255) - oq va rangli (127, 127, 127) - kulrang. Ko'proq va ko'proq yangi ranglar yaratish orqali siz uchta rang komponentining qiymatlarini o'zboshimchalik bilan tanlashingiz mumkin.

Tasvirdagi har qanday chizma ma'lum bir rang bilan bajarilishi kerak va ranglar ularni ishlatishdan oldin tasvirda taqsimlanishi kerak. Bundan tashqari, rasmda taqsimlangan birinchi rang avtomatik ravishda fon rangiga aylanadi. Shunday qilib, hech qanday holatda siz ranglarni ko'rsatmasdan qila olasiz deb o'ylamasligingiz kerak va odatda ranglarni taqsimlash operatsiyasi yangi bo'sh tasvirni yaratishdan keyingi birinchi operatsiya hisoblanadi.

Palitraga asoslangan tasvirlardagi ranglar imagecolorallocate() funksiyasi yordamida yaratiladi, u parametr sifatida tasvirni (oldin yaratilgan) va qizil, yashil va koʻk nisbatlarini koʻrsatuvchi uchta butun sonni oladi. Qaytish qiymati tasvirning ichki palitrasidagi yangi rang indeksini belgilaydigan butun sondir. Ushbu qaytarish qiymati o'zgaruvchiga tayinlanishi kerak, chunki belgilangan indeks qiymati ushbu rang yordamida kelajakdagi barcha operatsiyalarni bajarish uchun kerak.

Palitraga asoslangan tasvirlar maksimal 256 rangga ega boʻlishi mumkin. (Oʻquvchini bunday tasvirlar aslida nimaga asoslangani qiziqtirishi yoki qiziqtirmasligi mumkin, lekin palitraga asoslangan tasvirdagi har bir piksel aslida indeksni saqlaydigan bitta baytdan iborat. 256 rang palitrasidagi bitta elementdan iborat.)

Tasvirdagi ranglardan birini tarqatishda qaytarilgan indeks faqat shu tasvir uchun mazmunli ekanligini unutmang. Misol uchun, agar PHP skripti bitta rasmda taqsimlangan rangga $black belgilagan bo'lsa, u holda bu o'zgaruvchidan boshqa tasvirni qayta ishlash uchun chaqirilgan chizish buyrug'iga rang kiritish sifatida foydalanish mantiqiy emas.

Haqiqiy ranglar bilan tasvirlar

gd 2.0 va undan keyingi versiyalari, shuningdek, har bir piksel o'zboshimchalik bilan RGB rang raqamini saqlaydigan palitraga asoslangan bo'lmagan tasvirlarni yaratish imkoniyatini beradi. Ushbu haqiqiy rang formatida mumkin bo'lgan ranglar soni juda katta. Bu xususiyat nafaqat badiiy ifoda doirasini cheksiz kengaytiradi, balki gd asboblar to‘plamidan foydalangan holda xotiraga yuklangan haqiqiy ranglar bilan PNG va JPEG tasvirlarni ishonchli tarzda qayta ishlab chiqarish imkonini beradi.

Dastlabki tasvirni yaratish uchun boshqa funktsiyadan foydalanilishi va turli ranglarni tanlashda hech qanday cheklovlar yo'qligidan tashqari, haqiqiy rangli tasvirlar bilan ishlash tamoyillari palitraga asoslangan tasvirlarga o'xshashdir.

Xususan, siz hali ham yangi ranglar yaratish uchun ImageColorAllocate() ga qo'ng'iroq qilishingiz va keyinchalik chizish buyruqlarida foydalanish uchun o'zgaruvchiga qaytarish qiymatini belgilashingiz mumkin. Yagona farq shundaki, qaytarish qiymati palitradagi element indeksi emas, balki RGB rang raqamidir. Bundan tashqari, haqiqiy ranglarga ega tasvirlarda ImageColorAllocate() funksiyasining yon effekti sifatida yaratilgan fon rangi tushunchasi mavjud emas; Initsializatsiya natijasida barcha piksellarga qora belgi (0, 0, 0) beriladi.

Shaffoflik

gd 2.x versiyalari shaffoflik tushunchasini qo'llab-quvvatlaydi. Bu rang qanchalik shaffofligini ko'rsatish uchun alfa kanalidan (qizil, yashil va ko'k qiymatlarga qo'shimcha ravishda) foydalanadi. Bu, masalan, bir shaklni boshqasiga o'rnatishga imkon beradi, shunda birinchi shakl ikkinchisini to'liq qoplashdan ko'ra qisman ko'rinadigan bo'lib qoladi.

PHP-da tasvirlar bilan ishlashning ko'plab funktsiyalari nomida "alfa" so'zini o'z ichiga olgan analogga ega, bu ushbu funktsiyalarda rang to'rtta qiymat (R, G, B, A) bilan ifodalanganligini ko'rsatadi. Masalan, imageColorAllocate() funksiyasi uchta parametrni oladi va ImageColorAllocateAlpha() funksiyasini chaqirishda siz qiymati 0 dan 127 gacha bo‘lgan to‘rtinchi parametrni ko‘rsatishingiz kerak. Nol qiymati rangning butunlay shaffof emasligini bildiradi va qiymat. 127 soni rangning butunlay shaffof emasligini bildiradi

Koordinatalar va chizish buyruqlari

Gd asboblar to'plamidan foydalangan holda tasvirni yaratgandan so'ng, uning ichida chizish buyruqlarini belgilash imkonini beruvchi koordinatalar tizimi aniq yaratiladi. Ushbu tizimdagi cheklovchi koordinata qiymatlari tasvir kengligi va balandligining belgilangan parametrlari bilan belgilanadi.

Koordinatalarga (0, 0) mos keladigan ushbu tizimdagi koordinatalarning kelib chiqishi tasvirning yuqori chap burchagida joylashgan. X qiymatlari uchun ijobiy yo'nalish chapdan o'ngga, Y qiymatlari uchun esa yuqoridan pastga. (Kompyuter grafikasi koordinata tizimlarida kelib chiqishning bu joylashuvi keng tarqalgan, ammo analitik geometriyani o'rganganlar diagrammaning pastki chap burchagida bo'lishiga o'rganib qolganga o'xshaydi.)

Chizish buyruqlari soni juda katta. Bu buyruqlar qatoriga chiziq segmentlari, toʻrtburchaklar va yoylarni chizish buyruqlari hamda aniq piksel qiymatlarini oʻrnatish buyruqlari kiradi, lekin ular bilan cheklanmaydi. Ammo shuni yodda tutingki, ushbu chizish va chizish buyruqlarining yakuniy natijasi piksel qiymatlarini o'rnatishdir. Piksel qiymatlarini o'zgartiruvchi buyruqlar bajarilgandan so'ng, xotirada hech qanday iz qolmaydi (o'zgartirilgan qiymatlarning o'zidan tashqari), shuning uchun chizish va chizish buyruqlarini bekor qilish yoki turli buyruqlar natijalarini alohida ko'rsatish mumkin emas.

Belgilangan tasvirdan tashqariga chiqadigan chizish buyruqlariga hech narsa to'sqinlik qilmaydi, lekin bunday chizmaning ko'rinadigan ta'siri yo'q. Masalan, agar barcha koordinata qiymatlari manfiy bo'lsa, to'rtburchak rasmda ko'rinmaydi.

Formatni o'zgartirish

Barcha chizish va tasvirni manipulyatsiya qilish operatsiyalari ichki gd formatida ifodalangan tasvirda amalga oshiriladi. Va bu operatsiyalar bajarilgandan so'ng, skript ushbu tasvirni kerakli grafik formatga aylantirish va uni foydalanuvchining brauzer oynasiga (yoki faylga) chiqarish uchun aylantirish va chiqarish buyruqlaridan birini (imagepng, imagetjpeg va boshqalar) chaqirishi mumkin.

Resurslarni bo'shatish

Tugallangan gd tasvirini konvertatsiya qilish natijasi foydalanuvchiga o'tkazilgandan so'ng, biz ichki versiya bilan ishlash tugallangan deb hisoblashimiz mumkin. Bu shuni anglatadiki, ushbu versiyani yo'q qilish kerak. Buning to'g'ri yo'li imagedestroy() ni parametr sifatida tasvir bilan chaqirishdir.

gd kutubxonasi funktsiyalari

Biz ushbu maqolada PHP tarjimonining gd interfeysida taqdim etilgan barcha funktsiyalarni alohida sanab o'tmoqchi emasmiz. Ushbu ma'lumot bilan tanishish uchun php.net qo'llanmasining "Tasvirni qayta ishlash va yaratish" bo'limidan foydalanishni tavsiya etamiz. Ko'pgina gd funktsiyalari quyidagi jadvalda ko'rsatilgan toifalardan biriga kiradi. E'tibor bering, ushbu jadvalda keltirilgan funksiya nomlari har bir so'zning birinchi harfini o'qishni osonlashtirish uchun bosh harf bilan yozilgan, ammo kod misollarida bu holat har doim ham kuzatilmaydi, chunki PHP funksiya nomlari katta-kichik harflarga sezgir emas:

gd funksiyalarining tasnifi Eslatma misolini yozing
Tasvir yaratish funktsiyalari ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Yangi gd tasvirini qaytaring. ImageCreate() funksiyasi parametr sifatida tasvirning kengligi va balandligini oladi, boshqa funksiyalarning parametrlari esa fayl yoʻli, URL manzili yoki yuklanishi va gd formatiga oʻzgartirilishi kerak boʻlgan avval yaratilgan tasvirni oʻz ichiga olgan satrdir.
Rang taqsimlash operatsiyalarini bajaradigan funktsiyalar ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() ImageColorAllocate() funksiyasi parametr sifatida rasm tutqichini va qizil, yashil va ko‘kning kerakli qiymatlarini oladi, so‘ngra keyinchalik chizish va chizish operatsiyalarida foydalanish uchun rang raqamini qaytaradi. ImageColorAllocateAlpha funktsiyasi qo'shimcha parametrni qabul qiladi - shaffoflik koeffitsienti (0-127)
Ranglarni moslashtirish operatsiyalarini bajaradigan funktsiyalar ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Palitrali tasvirdagi mos rang indeksini qaytaring. O'z nomidagi "Eng yaqin" so'zini o'z ichiga olgan funktsiyalar eng yaqin mos rangni qaytaradi (mos keladigan aniqlik RGB qiymat maydonidagi nuqtalar orasidagi masofa sifatida o'lchanadi); "Aniq" belgisi bo'lgan funktsiyalar rang raqamini faqat qidirilgan bilan bir xil bo'lsa, qaytaradi, aks holda ular -1 qiymatini qaytaradi, "Alpha" nomli funktsiyalar to'rtta qiymat yordamida aniqlanadigan ranglarda ishlaydi (bilan shaffof ranglar)
Chiziqlarni chizish funktsiyalari ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Ular belgilangan shakldagi tekis segmentlar yoki egri chiziqlarni chizish uchun ishlatiladi. Odatda, bu funksiyalarning har birining birinchi parametri rasm, oxirgi parametri rang, oraliq parametrlari esa X va Y koordinatalari hisoblanadi.
Chizilgan qalam sozlamalari ImageSetStyle(), ImageSetThickness() Keyingi chiziq chizish buyruqlari tomonidan ishlab chiqarilgan chiziqlar xususiyatlariga ta'sir qiluvchi sozlamalarni o'zgartiring (bu funktsiyalarning ba'zilari faqat gd 2.0.1 yoki undan keyingi versiyalarida amal qiladi)
Chizish va to'ldirish funktsiyalari ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Qoida tariqasida, ular chiziqlar chizish uchun mos keladigan funktsiyalarga o'xshaydi, lekin ular nafaqat maydonlarning konturlarini chizishni, balki yaratilgan maydonlarni rang bilan to'ldirishni ham ta'minlaydi. ImageFill() maxsus funksiyasi belgilangan to'ldirish rangi yordamida to'ldirish amalini bajaradi. To'ldirish belgilangan XY koordinatalaridan boshlab barcha yo'nalishlarda amalga oshiriladi (bu xususiyatlardan ba'zilari gd 2.0.1 yoki undan keyingi versiyasini talab qiladi)
Matn bilan ishlash funksiyalari ImageString(), ImageLoadFont() ImageString funksiyasi parametr sifatida rasm dastagi, shrift raqami, X va Y koordinatalari, matn qatori va rangni oladi. Agar shrift raqami 1 dan 5 gacha bo'lsa, u holda ushbu rangdagi chiziqni ko'rsatish uchun beshta o'rnatilgan shriftlardan biri ishlatiladi. Boshqa tomondan, 5 dan katta shrift raqami ImageLoadFont() funksiyasidan foydalangan holda maxsus shriftni yuklash natijasini bildiradi.
Eksport funktsiyalari ImagePng(), ImageJpeg() Ichki gd tasvirini tegishli formatdagi rasmga aylantiring va keyin ushbu tasvirni chiqish oqimiga yuboring. Agar faqat bitta parametr ko'rsatilgan bo'lsa (tasvir tutqichi), u holda tasvir foydalanuvchiga aks etadi va agar fayl yo'li bo'lgan qo'shimcha parametr ishlatilsa, chiqish oqimining maqsadi faylga aylanadi.
Rasmni yo'q qilish funktsiyasi ImageDestroy() Tasvir dastagini parametr sifatida oladi va tasvir bilan bog'liq barcha resurslarni chiqaradi
HTTP tasvirni qo'llab-quvvatlash

Tasvir foydalanuvchi brauzerida to'g'ri ko'rsatilishi uchun tasvir qayerdan kelishi va uning formati qanday ekanligini ko'rsatish kerak. Shuning uchun, afsuski, yaratilgan HTML faylida, masalan, imageToPng() funksiyasiga qo'ng'iroqni oddiygina amalga oshirish va shu bilan tasvirni ko'rsatish muammosini hal qilish mumkin emas. Aslini olganda, siz tasvirning chiqish kodini PHP skriptida yaratilgan HTML kod bilan aralashtirishingiz kerak va buning uchun quyida tavsiflangan uchta variantdan birini ishlatishingiz mumkin.

To'liq sahifa tasvirlarini yaratish

Butun yaratilgan sahifani rasm sifatida formatlash mumkin. Bunday holda, tasvir ma'lumotlaridan oldin HTTP sarlavhasini o'tkazishingiz kerak va shu bilan keyingi ma'lum turdagi tasvir ekanligini e'lon qilishingiz kerak. Masalan, skript oxirida quyidagi qatorlar berilishi mumkin:

// ... tasvirni yaratuvchi va uni // o'zgaruvchiga tayinlovchi kod $image header("Content-type: image/png"); // Brauzerda sarlavhani ko'rsatish imagepng($image); // PNG formatiga aylantirilgan tasvirning o'zi ma'lumotlarini uzatish imagedestroy($image); // Resurslarni chiqarish

Ushbu yondashuvning afzalligi shundaki, har qanday ma'lumot, shu jumladan POST parametrlari kelajakdagi tasvirning tarkibi haqidagi ko'rsatmalarni etkazish uchun ishlatilishi mumkin. Salbiy tomoni shundaki, natijada paydo bo'lgan sahifa hech qanday oddiy HTML kodini o'z ichiga olmaydi. Aslida, siz hatto skriptlardagi sarlavha va rasmdan oldin hech qanday matn chiqishini jo'natmaslikdan ehtiyot bo'lishingiz kerak, chunki bu tarkibni muddatidan oldin yuborish bilan barobar. Bunday holda, "Sarlavhalar allaqachon yuborilgan ..." xato xabari paydo bo'ladi.

Fayllarda saqlangan rasmlarni joylashtirish

Avvalo, HTML identifikatorni qo'llab-quvvatlashiga e'tibor bering , bu quyidagi misolda bo'lgani kabi rasm fayli yo'lini yoki URL manzilini ko'rsatish orqali rasmni joylashtirish imkonini beradi:

Ushbu dizayn statik tasvir fayllari uchun amal qiladi, ammo yangi yaratilgan tasvirni o'rnatishni yoqolmasligi uchun hech qanday sabab yo'q. Shunday qilib, siz skriptni tayyorlashingiz mumkin, unda rasm avval yaratilgan, keyin rasm ma'lumotlari mahalliy faylga yoziladi va keyin tegishli identifikator bilan HTML kodi hosil bo'ladi. , yangi yaratilgan faylga ishora.

Ushbu yondashuvning birgina kamchiliklari shundaki, birinchidan, sahifa yaratish jarayoni fayllarni yozishni o'z ichiga olishi kerak, bu ko'p vaqt talab qilishi mumkin, ikkinchidan, ularni ishlatish tugagach, ular bilan nima qilish kerakligini aniqlash kerak.

Ammo ma'lum bir vaziyatda bu yondashuv idealdir. Bu cheklangan tanlovlar to'plamini ifodalovchi tasvirlarni yaratish va keshlash haqida. Bunday holda, ma'lum bir vaziyatni tasvir faylining nomi bilan bog'lashning o'ziga xos usuli mavjud. Tasvirni chiqarishni talab qiladigan ushbu vaziyatlardan ba'zilari paydo bo'lganda, tegishli fayl allaqachon mavjudligi tekshiriladi. Agar javob ijobiy bo'lsa, ushbu faylga havola oddiygina qo'llaniladi, identifikator sifatida formatlanadi , va agar javob yo'q bo'lsa, u holda rasm yaratiladi, faylga yoziladi va keyin yana ushbu rasmga havola qo'llaniladi. Oxir-oqibat, yangi fayllarni yaratish shunchaki kerak bo'lmaydi.

Skriptlarda yaratilgan tasvirlarni joylashtirish

Nihoyat, mustaqil rasm skriptini taqdim eta olmasligingiz uchun hech qanday sabab yo'q va natijada olingan tasvirni deskriptorda ko'rsatib, boshqa skript tomonidan yaratilgan dinamik sahifaga joylashtirasiz. Ushbu skriptning URL manzili. Yagona qiyinchilik - kerakli ma'lumotlarni bog'liq sahifaga qanday o'tkazishni tanlash. Misol uchun, o'rnatilgan tasvirni ko'rsatadigan tutqich quyidagicha ko'rinishi mumkin:

Bunday holda, ballpage.php skripti rasmning turli pozitsiyalarida joylashgan rangli sharlarning PNG tasvirlarini qaytaradi.

Ammo bu yondashuvdan foydalanish muammolarga olib kelishi mumkin, chunki veb-serverlar va brauzerlar ba'zan qayta ishlanayotgan fayllarning qo'shimchalarini tekshiradilar va tekshirish natijalarini olganlarida, ularga boshqacha munosabatda bo'lishadi. Misol uchun, ballpage renderlash skriptiga .php kengaytmasi berilishi kerak bo'lishi mumkin, shunda Apache serveri server kodini PHP kodi sifatida talqin qilish kerakligini aniqlashi mumkin (garchi kerakli ishlov berish rejimini konfiguratsiya fayllari orqali ham belgilash mumkin).

Shu bilan birga, brauzerlarning nostandart versiyalari ham mavjud bo'lib, ular .php kengaytmali fayl tasvirni yaratish imkoniyatini hisobga olmaydi, garchi o'tkazilgan sarlavha tasvirdan keyin kelishini bildirsa ham. Shuning uchun, ushbu usuldan foydalanganda, siz turli xil brauzerlarda skriptlarni sinab ko'rishingiz va foydalanuvchilar doirasi siz mo'ljallangan shakldagi sahifalarni olishiga ishonch hosil qilishingiz kerak.

Quyida tasvirlarni yaratish uchun gd kutubxonasidan foydalanish misollari keltirilgan.

Gd kutubxonasidan foydalanishga misol: oddiy shakllar yaratish

Quyidagi misolda oddiy geometrik shakllarni o'z ichiga olgan chizma yaratish uchun gd kutubxonasidan qanday foydalanishni ko'rsatamiz:

Sozlamalarni o'zingiz bilan almashtiring va ushbu faylni fcdemo papkasida connect-to-database.php nomi ostida saqlang.

Keling, tasodifiy ma'lumotlarni kiritamiz

Agar bu haqiqiy loyiha bo'lsa, vaqt o'tishi bilan foydalanuvchilar jadvali o'sib boradi, ammo namoyish qilish uchun biz ba'zi ma'lumotlarni kiritishimiz kerak. Keling, jadvalga tasodifiy ma'lumotlarni kiritadigan kichik skript yozaylik. Agar siz quyidagi kodni tushunmasangiz, tashvishlanmang - bu qo'llanma uchun muhim emas.

Genere-random-data.php deb nomlangan ushbu faylni barchasini bitta papkada saqlang.

Avval biz ma'lumotlar bazasiga ulanish faylini qo'shamiz. Keyin biz foydalanuvchini ro'yxatdan o'tkazish vaqti tasodifiy tanlanadigan vaqt oralig'ini belgilaymiz. Siz kiritiladigan qatorlar sonini o'zgartirishingiz mumkin. Buning uchun $RecordsToInsert o'zgaruvchisini sozlashingiz kerak.

Keyin yaratilgan yozuvlarni ma'lumotlar bazasiga kiritish uchun skriptni ishga tushiramiz. Ushbu jarayonni boshlash uchun ushbu manzilga o'ting - http://localhost/fcdemo/generate-random-data.php.

Oxir-oqibat siz quyidagi xabarni ko'rishingiz kerak: "Qo'yilgan ($RecordsToInsert) yozuvlar"

Qadam 2. Veb-sayt skeletini tayyorlang

Grafikimizni ko'rsatish uchun juda oddiy sahifa yaratishimiz kerak. Shunga o'xshash narsa:

FusionCharts v3.2 - LinkedCharts PHP demo