Гэр / Интернет дээр ажиллах / Php дээрх графикуудын жишээ. PHP болон FusionCharts дээр интерактив диаграмм үүсгэх. PHP кодыг сайжруулах

Php дээрх графикуудын жишээ. PHP болон FusionCharts дээр интерактив диаграмм үүсгэх. PHP кодыг сайжруулах


Чи мэднэ дээ хөгшөөн би ийм юм үзээгүй удаж байна. Тэр ч байтугай анимэ уях ёстой юм шиг санагдсан. Хөгшрөлт нь үл үзэгдэх болж, эдгээр бүх сэлэмтэй хөвгүүд, эрч хүчтэй үстэй охидууд тасралтгүй наалдамхай масс руу нийлэв. Бүх дүрүүд зөвхөн тэнэг, чанга дуугаар, зөвхөн мөнхийн тухай ярьдаг юм шиг санагдаж эхлэв. Бүх зүйл залуу насны галзуу солиотой механик уран зөгнөлөөр дүүрэн байна, хөөе! .. "Театр ..."-ыг олсондоо ямар их баяртай байна. Энэ юу шиг харагдаж байна? Бид түүнийг харж дассан шиг - тийм ч их биш. Энэ нь ямар нэгэн зүйл зурах - тийм ээ, мэдээжийн хэрэг. Тэгээд сэтгэл санааны хувьд “” дээр илүү “татдаг” байх. Эсвэл "амьдрал шиг" хуучин Гүржийн богино хэмжээний кинонуудыг (санаж байна уу?) Янз бүрийн хүмүүс, залуу, эсрэгээрээ, тэд ярилцаж, амьдардаг, бие биенээ мэддэг, ажилладаг ... Мэдээжийн хэрэг, зарим нэг чухал мөчийг хамгийн энгийн зүйл биш, харин үйл явдлын төлөө авдаг. Гэхдээ энэ маш чухал мөч бол анхны үнсэлт биш, ид шидийн хүчийг олж авахгүй, жишээлбэл, олон жилийн дараа ангийнхантайгаа уулзах, эсвэл өндөр цалинтай ажлаас халагдах, хадам ээжтэйгээ уулзах зэрэг нь ямар сайхан байдаг вэ. "30 наснаас хойш амьдрал байдаг уу?" Тийм үү? Би байдаг гэж бодох дуртай. Румико Такахаши ч бас тэгж боддог нь надад таалагдаж байна.

Битгий хашгир, зулзага, би удаан хүлээхгүй. Би аль хэдийн шалгаж байна. Ерөнхийдөө "миний компьютер" гэж юу гэсэн үг вэ? Тэгээд минийх хаана байна? .. Эцсийн эцэст би бас заримдаа ганц хоёр анимэ үзэх хэрэгтэй болдог. Хараач, тэр "" ба "" бүгдийг дүүргэсэн ... Би амьдралдаа нэг удаа тайван асууж болох уу ?! Би юу харж байна вэ? Румико Такахаши театр, тэнд хайрцагнууд байна... Яах гэж туулай гэж? Нэгдүгээрт, энэ бол хог биш, 2003 он, хоёрдугаарт, "" чамд таалагдаж байна, "" та дуртай уншсан - мангака нь адилхан, гэхдээ чи ур чадвараа алдахгүй, финч. Такахаши-сан зурж, сонирхлыг нь маш сайн мэддэг...Тэгвэл цуврал яагаад ийм богино байдаг юм бэ? Энэ бол цуврал биш, энэ бол тусдаа өрнөлтэй, өөр өөр дүр бүхий богино хэмжээний киноны багц юм. Инээдтэй эсвэл нулимстай юу? Мөн тэдгээр, мөн тэдгээр нь - "жүжиг", "инээдмийн", "өдөр тутмын амьдрал" гэж бичсэнийг харж байна уу ... Та "өдөр тутмын амьдралд" дургүй юу? Битгий ингэж ярь, бяцхан топ, тэгэхгүй бол тэр ч бас чамайг хайрлахгүй. Өдөр тутмын зөв дэглэм бол агуу зүйл юм! Японы Хрущевт хөршөөсөө оцон шувууг хэрхэн нууж байсныг танд үзүүлье. Хүүхэд насных шигээ ээждээ Сериюшка өг, тэгээд би оройн хоолоо хийж өгье, за юу? ..

Би зүгээр л уйлсан, хараал ид! Би ийм зүйлд орж чадна гэж бодсонгүй! Тэгээд инээдтэй юм, бурхан минь, инээдтэй, тэр тусмаа ухаан алдаж унасан хөгшин эмэгтэй яагаад түүнийг дахин амьдруулсныг хайж байгаа тухай. Түүний энэ түүхийн өмнөх хайрын түүх өөр өөр нүдээр: тэр өөрийнхөө тухай хэрхэн ярьдаг, яаж - түүний сэдэв; юу гэж нэрлэдэг вэ, "ялгааг мэдэр!". Тэгээд хөгшин эмэгтэйн хөл хугарч, би зүгээр л эмзэглэлээс дэрээ хазав! .. Мөн хуримын ордны тухай цуврал! Би жинхэнэ романтик түүхүүдэд маш их дуртай, бүх зүйл дур булаам өнгөлөгчөөс гялалзсан үед биш, харин амьд хүнийг үнэхээр өрөвдөж чаддаг. Хөгширсөн эхнэр, нөхөр хоёрын тухайд эдгээр харамслыг маш сайн илэрхийлж, залуучуудыг баригдашгүй, аль хэдийн мангар сүүлээр нь барьж авах оролдлого ... бүх зүйл маш ухаалаг, сайхан төгсдөг. Би бүр бодсон: магадгүй миний өвөг дээдэс бие биедээ огт хайхрамжгүй ханддаггүй, гэхдээ тэд нас ахих тусам үүнийг хэрхэн харуулахаа мартсан байх ...

Шөнөдөө олон ангит кино үзэж байна. Аажмаар. Тэд маш өөр, та тэдгээрийг холихыг хүсэхгүй байна. Та янз бүрийн газар очиж байгаа юм шиг байна. Мөн сэтгэл санаа нь огт өөр, сэтгэгдэл. Үгүй Танд таалагдахгүй байх магадлалтай. Учир нь ямар ч сонирхолтой зүйл байхгүй. Тэгээд сюрреалистбас. Тэгээд ч "сэтгэлзүй" - "Хэцүү хүүхэд нас, витамин дутагдалтай байсан ч цагтаа тоглоомын хүү худалдаж авах байсан, новшнууд, та нар харж байна, маньяк алуурчин болохгүй" - үгүй. Мөн онцгой сургамжтай зүйл алга. Ийм зүйл үндсэндээ юу ч заадаггүй. Өөр хэн нэгний амьдрал юу зааж чадах вэ? Тэр ч бас тэнд байгаа болохоор л. Та үүнийг тооцоолохыг оролдож болно ... Эмгэг, өндөр тэмдэглэлгүйгээр. Жүжиг ч биш шүү дээ? Карлсон хэлэхдээ: "Өчүүхэн зүйл бол амьдралын асуудал!". Энэ бүхэн бол амьдралын зүйлс. аяндаа. Бид мэргэжлийн алуурчид болон бусад бэлэвсэн эхнэрүүдийг өрөвдөх сэтгэлээр буруутгагддаг тул бичиг хэргийн ажилтан эсвэл гэрийн эзэгтэйтэй харамсах нь ямар нэгэн муухай зан юм ... тийм ээ, би чамд ёс суртахуун уншдаггүй, үүнийг хас . Та асуусан - би хариулсан. Алив, шинэ бүтээгдэхүүнийнхээ талаар яриач. Тэгээд “Театр...” дуусаад л авна. Энэ нь дарс шиг, түүнийг залгих боломжгүй юм. Сүүдэр нь хүрэхгүй, эсвэл амт нь түрхэх болно. Энэ нь ичмээр байх болно ...

Вэб хувилбарт график үүсгэх хэрэгслийн хамрах хүрээг тодорхойлохын тулд дараах цувралыг анхаарч үзээрэй сонголтуудграфик хэрэглээ:

  • Өөрийнхөө бүтээсэн эсвэл хаа нэг газраас зээлсэн статик зургуудыг HTML хуудсанд суулгаж болно.
  • Програмаар үүсгэсэн зургуудыг (HTML + CSS) ашиглаж болно.
  • Та gd номын санг ашиглан скриптийг гүйцэтгэх явцад гарч болох бүх нөхцөл байдалд статик график дүрсийг урьдчилан үүсгэж, файлд хадгалж, нөхцөлөөр нь харуулах боломжтой.

Бид графикийг хялбаршуулсан тул статик дүрс ашиглан хэрэгжүүлэх сонголтыг авч үзэхгүй тул эхлээд энгийн сонголтыг (HTML + CSS график), дараа нь PHP дээр gd номын санг ашиглах талаар авч үзэх болно.

HTML + CSS график

Вэбсайтад зочилсон хүмүүс өнгөт талтай хэвтээ зураасыг мэддэг бөгөөд энэ нь ялангуяа судалгааны үр дүнг харуулахад түгээмэл байдаг. Эхлээд харахад хүн ямар нэгэн юм шиг сэтгэгдэл төрүүлдэг график тусламж, гэхдээ бодит байдал дээр хэд хэдэн энгийн скрипт ашиглахад хангалттай:

" . $ex->getMessage() .""; } } ?> PHP, HTML, CSS дээр графиктай ажиллах

Захиалгын хуудас

Жимс
Хүнсний ногоо
Та захиалсан:жүрж:

Алим:

Банана:

Улаан лооль:

Өргөст хэмх:

Төмс:

EOT; ?>

Энэ жишээ нь PHP-ийн ямар ч шинэ боломжуудыг харуулахгүй, харин HTML болон CSS ашиглан график үүсгэх энгийн аргыг (энэ тохиолдолд баганан диаграмм) харуулж байна.

gd номын сан

Өмнөх хэсэгт тайлбарласан график хэрэгслүүд нь стандарт HTML кодын боломжуудыг бараг шавхаж байна (хэдийгээр бид хүчирхэг HTML5 Canvas график үүсгэгчийг хамруулаагүй гэдгийг тэмдэглэх нь зүйтэй). Одоо gd номын санг ашиглан үнэхээр дурын график үүсгэх аргуудыг тайлбарлах руу шилжье.

gd номын сангийн ерөнхий тодорхойлолт

Ерөнхийдөө багц хэрэгсэл gd нь зураг үүсгэх, удирдахад зориулагдсан C кодын сан юм. Энэхүү номын санг Boutell.com сайтын авъяаслаг, өгөөмөр хүмүүс анх боловсруулж, олон нийтэд нээлттэй болгосон.

gd номын сан өөрөө тийм биш график програмэсвэл зургийн программ бөгөөд бие даасан програм биш юм GUIхэрэглэгч. Харин gd номын сан нь ямар ч программ дуудаж, хүссэн дүрсний засварыг гүйцэтгэх функцээр хангадаг. Энэ нь gd номын сангийн кодыг ашиглах шаардлагатай ямар ч С программыг gd номын сантай холбож болно гэсэн үг юм. Энэ бол PHP системийг хөгжүүлэгчид яг ийм асуудлыг шийдсэн юм.

Үнэн хэрэгтээ энэ зорилгоор интерфэйсийн функцүүдийн багц бичигдсэн бөгөөд энэ нь PHP скриптээс gd горимуудыг дуудахад хялбар болгодог. Гэхдээ gd номын сан нь PHP-д зориулсан ямар ч код агуулаагүй бөгөөд Perl, Pascal, Haskell, REXX зэрэг бусад програмчлалын хэл, орчноос номын санд хандах боломжийг олгодог интерфейсүүдийг боловсруулсан.

gd номын сан нь эх зургийг (эхэндээ хоосон, хоосон цаас шиг) үүсгэх функцуудыг дуудаж, эдгээр эх зургийг ашиглан зурж, дотор нь зурах боломжийг олгодог. янз бүрийн арга замуудэцэст нь зургийг gd-ийн дотоод зургийн форматаас стандарт зургийн формат руу хөрвүүлж, эцсийн цэг рүү нь илгээнэ (хөтчийн цонх руу гаргах эсвэл файл эсвэл мэдээллийн санд хадгалах). Эдгээр бүх үйлдлүүд нь програмын хяналтан дор хийгддэг бөгөөд гараар хийгддэггүй тул бүтээсэн зургууд нь дур зоргоороо төвөгтэй болж, програмын явцад ямар ч нөхцөл байдлаас шалтгаалж, тэдгээрийг хамааралтай болгох нь зүйтэй юм.

Зургийн форматууд

gd номын сан нь үндсэндээ олон төрлийн форматыг ашиглан зургийг импортлох, экспортлох боломжийг олгодог. Хамгийн алдартай зургийн формат нь GIF, JPEG, PNG боловч эдгээр форматуудын сүүлийнх нь бидний жишээнүүдэд ихэвчлэн ашиглагддаг.

GIF болон PNG форматууд нь пикселтэй харгалзах өнгөт элементүүдийн сүлжээг дүрслэх зориулалттай бөгөөд зарим нэмэлтүүдтэй. Эхний нэмэлт нь нүднүүдэд өнгөт тоон хүснэгт дэх бодит өнгөний дугаар эсвэл индексийг агуулж болно. (Эхний сонголт нь илүү тод дүрсийг бий болгодог, учир нь энэ нь олон тооны өөр өөр өнгө оруулах боломжийг олгодог бол сүүлчийн сонголт нь илүү нягт дүрсийг бий болгодог.)

Хоёр дахь нэмэлт нь дараах байдалтай байна. Мэдээжийн хэрэг, GIF болон PNG форматын концепцийн дүрслэл нь маш энгийн боловч практик дээр эдгээр формат дахь зургийг унших, бичих, шилжүүлэх нь үргэлж шахсан хэлбэрээр хийгддэг. Нүдний сүлжээ хэлбэрээр дүрслэгдсэн өгөгдлийг хадгалахад их хэмжээний санах ой шаардлагатай тул шахах шаардлагатай. 500x400 пикселийн энгийн зураг нь 200,000 пикселтэй бөгөөд хэрэв пиксел бүрт гурван байт шаардлагатай бол санах ойн хэмжээ аль хэдийн хагас мегабайтаас илүү байна.

Шахалтын сэдэв нь өргөн цар хүрээтэй бөгөөд нарийн төвөгтэй боловч ихэнх шахалтын алгоритмууд зургийн хэмжээг багасгахын тулд зургийн илүүдлийг багасгахад тулгуурладаг. (Жишээ нь, пиксел бүрийн ногоон утгыг тусад нь зааж өгөхөөс илүү зураг дээрх пиксел бүрийг ногоон гэж зааж өгөхөд санах ойн зай бага байх болно.) Ийм нарийн төвөгтэй ажлууд тул эдгээр асуудлыг шийдвэрлэх аргуудыг шахалтын алгоритмд ашигладаг. доторх зургуудыг бүрдүүлэх GIF форматбүр патент авсан.

Номын сангийн суурилуулалт

Үнэнийг хэлэхэд, gd номын санг суулгаж, түүнийг PHP системтэй амжилттай ажиллуулна гэдэг нэлээд хэцүү ажил юм. Энэ нь ямар нэгэн дутагдалтай холбоотой биш юм. програм хангамж PHP эсвэл gd, гэхдээ бүхэлдээ тохиргооны асуудлаар тодорхойлогддог; Ялангуяа та gd номын сангууд хаана байх ёстойг, хаана байх ёстойг ойлгож, бүх гүйцэтгэгдэх файлуудын эмхэтгэл, холбох алхмууд зөв хийгдсэн эсэхийг шалгах хэрэгтэй. Тиймээс хэрэглэгч PHP системд gd номын сан аль хэдийн суулгагдсан, gd дэмжлэг аль хэдийн идэвхжсэн гэдгийг олж мэдсэн тохиолдолд (вэб хостинг компанийн зөвшөөрлөөр эсвэл уг номын сан нь суулгасан PHP системд багтсан учраас) хамгийн боломжит нөхцөл байдал юм.

Иймд gd номын санг суулгасан эсэхийг шалгах замаар 0 алхамаас эхлэх ёстой. Эхлээд скрипт файлдаа дараах кодыг оруулаад, вэб хостинг компаний скриптийг дэмждэг эсэхээс үл хамааран хөтөч дээр ажиллуулсны үр дүнг харна уу.

Энэ хуудсыг дэлгэцэн дээр харуулсны дараа хөтөчийн цонхноос "gd" гэсэн текстийн мөрийг хайхад хангалттай. Үүний үр дүнд таны PHP суулгац gd номын санг хэр зэрэг дэмжих боломжтойг тайлбарласан дэд хэсэг гарч ирнэ. Хэрэв та зөвхөн тодорхой төрлийн зургийг (жишээ нь PNG форматаар) үзүүлэхээр төлөвлөж байгаа бөгөөд phpinfo() функцийн үр дүн нь энэ төрлийн зургийг дэмжихийг зөвшөөрч байгааг харуулж байгаа бол та тэр даруй ажилдаа орж болно. Хэрэв gd хувилбарын өгөгдөлд "багцлагдсан" гэсэн үг байгаа бол PHP-тэй хамт ирдэг gd номын санг ашигладаг.

Хэрэв gd номын сангийн тухай дурьдсаныг олох оролдлого бүтэлгүйтсэн бөгөөд та өөрөө PHP суулгацыг хийж байгаа бол gd номын санг суулгаж, тохируулж болно. (Нөгөө талаас, хэрэв таны хостинг компани PHP-ийн суулгацыг хариуцдаг бол та тэр компаниас gd номын санд дэмжлэг үзүүлэхийг хүсэх эсвэл өөр вэб хостинг компани ашиглахад л хангалттай.)

PHP-тэй хамт ирдэг gd номын санг ашиглах нь gd суулгахтай холбоотой олон бэрхшээлийг арилгадаг ч бүгдийг нь биш. Үнэн хэрэгтээ түгээлтийн багцад багтсан хувилбарыг ашигласнаар gd номын санг авах боломжтой боловч gd-д ажиллахад шаардлагатай бүх номын сангууд байх албагүй. gd номын сан нь өөр хэд хэдэн сангаас хамаардаг: libpng (PNG зурагтай ажиллахад зориулагдсан), zlib (шахахад ашигладаг) болон jpeg-6b эсвэл түүнээс хойшхи (PNG зурагтай ажиллахад зориулагдсан). JPEG зургууд, Хэрэв шаардлагатай бол). Заасан сангууд нь Линуксийн олон суулгацуудад аль хэдийн байдаг бөгөөд энэ тохиолдолд суулгалтын лавлахыг заалгүйгээр параметрүүдэд шаардлагатай сонголтыг (жишээ нь --with-zlib) оруулахад хангалттай. Хэрэв та PHP тохиргоог өөрөө хийж байгаа бол gd-ийн багц хувилбарыг гүйцэтгэх файлд оруулахад --with-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().

Палетт дээр суурилсан зургууд

Өнгө нь 0-ээс 255 хүртэлх гурван тоог ашиглан Улаан-Ногоон-Цэнхэр (RGB) форматаар тодорхойлогддог. Жишээлбэл, тоонуудын (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 зургууд gd хэрэглүүрийг ашиглан санах ойд ачаалагдсан бодит өнгө бүхий JPEG файлууд.

Анхны дүр төрхийг бий болгоход өөр функцийг ашигладаг бөгөөд өөр өөр өнгө сонгоход хязгаарлалт байхгүй тул бодит өнгө бүхий зурагтай ажиллах зарчим нь палитр дээр суурилсан зурагтай төстэй юм.

Ялангуяа та шинэ өнгө үүсгэхийн тулд ImageColorAllocate() функцийг дуудаж, дараа нь зурах командуудад ашиглахын тулд буцах утгыг хувьсагч болгон тохируулах боломжтой хэвээр байна. Ганц ялгаа нь буцаасан утга нь палитр дахь элементийн индекс биш RGB өнгөний дугаар юм. Мөн бодит өнгөт зургуудад ImageColorAllocate() функцийн гаж нөлөөгөөр үүссэн дэвсгэр өнгөний тухай ойлголт байдаггүй; эхлүүлсний үр дүнд бүх пикселийг хар тэмдэглэгээ (0, 0, 0) өгдөг.

Ил тод байдал

gd 2.x хувилбарууд нь ил тод байдлын тухай ойлголтыг дэмждэг. Энэ нь альфа сувгийг (улаан, ногоон, цэнхэр утгуудаас гадна) ашигладаг бөгөөд энэ нь өнгө хэр тунгалаг болохыг харуулдаг. Энэ нь жишээлбэл, нэг хэлбэрийг нөгөөгөөр нь давхарлах боломжийг олгодог бөгөөд ингэснээр эхний хэлбэр нь хоёр дахь хэлбэрийг бүрэн давхцуулахын оронд хэсэгчлэн харагдах болно.

PHP-д олон зургийн функцууд нь нэрэнд нь "альфа" гэсэн үгийг агуулсан эквиваленттай байдаг бөгөөд энэ нь эдгээр функцүүдийн өнгийг дөрвөн утгаар (R, G, B, A) төлөөлдөг болохыг харуулж байна. Жишээлбэл, imageColorAllocate() функц нь функц дуудагдах үед гурван параметрийг авдаг ImageColorAllocateAlpha()та 0-ээс 127-ын хоорондох утгатай дөрөв дэх параметрийг зааж өгөх ёстой. Тэгийн утга нь өнгө нь бүрэн тунгалаг, 127-ийн утга нь өнгө бүрэн ил тод байгааг илтгэнэ.

Координат ба зургийн командууд

gd хэрэглүүрийг ашиглан зураг үүсгэсний дараа координатын систем далд хэлбэрээр үүсдэг бөгөөд энэ нь танд зургийн командуудыг тохируулах боломжийг олгодог. Энэ систем дэх координатын хязгаарын утгыг тодорхойлно өгөгдсөн параметрүүдзургийн өргөн ба өндөр.

Энэ систем дэх координат (0, 0)-д тохирох координатын гарал үүсэл нь зургийн зүүн дээд буланд байрладаг. X утгын эерэг чиглэл нь зүүнээс баруун тийш, Y утгын хувьд дээрээс доош байна. (Координатын системд компьютер графикгарал үүслийн энэ байршил түгээмэл боловч аналитик геометрийг судалсан хүмүүс диаграммын зүүн доод буланд гарал үүсэлтэй байдагт дассан бололтой.)

Зурах командын тоо маш их байна. Эдгээр командуудад шугамын сегмент, тэгш өнцөгт, нум зурах командууд, мөн пикселийн тодорхой утгыг тохируулах командууд багтдаг боловч үүгээр хязгаарлагдахгүй. Гэхдээ эдгээр бүх зурах, зурах командуудын эцсийн үр дүн нь пикселийн утгыг хуваарилах явдал гэдгийг санаарай. Пикселийн утгыг өөрчилсөн командуудыг гүйцэтгэсний дараа санах ойд ямар ч ул мөр үлдэхгүй (өөрчлөгдсөн утгуудаас бусад) тул зурах, зурах командын нөлөөг цуцлах эсвэл өөр өөр командын үр дүнг тусад нь харуулах арга байхгүй.

Заасан зургаас хэтэрсэн зурах командуудад юу ч саад болохгүй, гэхдээ ийм зураг нь харагдахуйц нөлөө үзүүлэхгүй. Жишээлбэл, зураг дээр координат нь бүгд сөрөг байх тэгш өнцөгтийг харуулахгүй.

Формат хөрвүүлэх

gd-ийн дотоод форматаар дүрслэгдсэн зураг дээр зурах, дүрс засах бүх үйлдлийг гүйцэтгэдэг. Мөн эдгээр үйлдлүүд дууссаны дараа хөрвүүлэлт, гаралтын командуудын аль нэгийг (imagepng, imagetjpeg гэх мэт) скрипт дотор дуудаж, энэ зургийг шаардлагатай график формат руу хөрвүүлж, хэрэглэгчийн хөтөчийн цонхонд (эсвэл файл руу) гаргах боломжтой. ).

Нөөцийг гаргах

Дууссан gd зургийг хувиргасны үр дүнг хэрэглэгчдэд шилжүүлсний дараа дотоод хувилбартай ажиллах ажил дууссан гэж үзэж болно. Энэ нь тийм гэсэн үг энэ хувилбарустгах ёстой. Зөв замИйм үйлдлийг гүйцэтгэх нь функцийг дуудах явдал юм imagedestroy()параметр болгон зурагтай.

gd номын сангийн функцууд

Бид энэ нийтлэлд PHP орчуулагчийн gd интерфэйс дэх бүх функцийг тусад нь тоолж, тайлбарлахыг хүсэхгүй байна. Энэ мэдээлэлтэй танилцахын тулд бид 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 ба ингэснээр зураг харуулах асуудлыг шийддэг. Үндсэндээ та зургийн гаралтын кодыг PHP скрипт дээр үүсгэсэн HTML кодтой хооронд нь оруулах ёстой бөгөөд үүнийг хийхийн тулд доор тайлбарласан гурван сонголтын аль нэгийг ашиглаж болно.

Бүтэн хуудасны зураг үүсгэх

Үүсгэсэн хуудсыг бүхэлд нь зураг болгон жаазалж болно. Энэ тохиолдолд зургийн өгөгдлийн өмнө байрлах HTTP толгойг дамжуулж, тодорхой төрлийн зураг дагаж байгааг зарлах шаардлагатай. Жишээлбэл, скриптийн төгсгөлд дараах мөрүүдийг өгч болно.

// ... зураг үүсгэж, // хувьсагч руу оноодог код $image header("Content-type: image/png"); // Хөтөч дээр гарчгийг харуулах imagepng($image); // PNG imagedestroy($image) руу хөрвүүлсэн зургийн өгөгдлийг дамжуулах; // Үнэгүй нөөц

Энэхүү аргын давуу тал нь аливаа мэдээлэл, түүний дотор POST параметрүүдийг ирээдүйн зургийн найрлагын талаархи зааврыг дамжуулахад ашиглаж болно. Үүний сул тал нь гарч ирсэн хуудсанд ердийн HTML код агуулах боломжгүй юм. Үнэн хэрэгтээ та скрипт дэх гарчиг, зургийн өмнө ямар ч текстийн гаралтыг илгээхгүй байхаас болгоомжлох хэрэгтэй, учир нь энэ нь контентыг хугацаанаас нь өмнө илгээхтэй адил юм. Энэ тохиолдолд "Толгойг аль хэдийн илгээсэн ..." алдааны мэдэгдэл гарч ирнэ.

Файлд хадгалагдсан зургуудыг оруулах

Юуны өмнө бид үүнийг тэмдэглэж байна HTML хэлбариул дэмжигдсэн , энэ нь танд дараах жишээн дээрх шиг зургийн файлын зам эсвэл URL-г зааж дүрс оруулах боломжийг олгоно.

Энэ бүтэц нь статик зургийн файлд хамаатай боловч шинээр үүсгэсэн дүрсийг оруулахад ашиглах боломжгүй болсон шалтгаан байхгүй. Тиймээс эхлээд зургийг үүсгэж, дараа нь зургийн өгөгдлийг локал файлд бичиж, дараа нь HTML кодыг тохирох тодорхойлогчоор үүсгэсэн сценарийг бэлтгэх боломжтой. зүгээр л cos-ыг зааж байна өгсөн файл.

Энэ аргын цорын ганц сул тал бол нэгдүгээрт, хуудас үүсгэх процесст файл бичих үйлдлүүдийг оруулах шаардлагатай бөгөөд энэ нь удаан хугацаа шаардагдах бөгөөд хоёрдугаарт, файлууд дууссаны дараа тэдгээрийг юу хийхээ олж мэдэх явдал юм. .

Гэхдээ зарим тохиолдолд энэ арга нь хамгийн тохиромжтой. Энэ талаар юмХязгаарлагдмал сонголт бүхий зургуудыг үүсгэх, кэшлэх тухай. Энэ тохиолдолд тодорхой нөхцөл байдлыг зургийн файлын нэртэй холбох тодорхой арга байдаг. Зургийн гаралтыг шаарддаг эдгээр нөхцөл байдлын зарим нь тохиолдоход холбогдох файл байгаа эсэхийг шалгадаг. Эерэг хариулттай тохиолдолд тодорхойлогч хэлбэрээр форматлагдсан энэ файлын холбоосыг ашиглана. , хэрэв хариулт нь сөрөг байвал зураг үүсгэж, файлд бичиж, дараа нь дахин энэ зургийн холбоосыг ашиглана. Эцсийн эцэст шинэ файл үүсгэх шаардлагагүй болно.

Скриптэд үүсгэсэн зургуудыг оруулах

Эцэст нь, офлайн дүрслэлийн скриптийг өгч, дараа нь үүссэн зургийг оруулах боломжгүй байх ямар ч шалтгаан байхгүй. динамик хуудасТодорхойлогч хэсэгт зааж өгсөн өөр скриптээр үүсгэгдсэн Энэ скриптийн URL. Энэ тохиолдолд цорын ганц бэрхшээл бол шаардлагатай өгөгдлийг хамааралтай хуудас руу хэрхэн дамжуулахыг сонгох явдал юм. Жишээлбэл, суулгасан дүрсийг харуулсан тодорхойлогч дараах байдалтай байж болно.

Энэ тохиолдолд ballpage.php скрипт нь зургийн янз бүрийн байрлал дахь өнгөт бөмбөгний PNG зургийг буцаана.

Гэсэн хэдий ч энэ аргыг ашиглах үед вэб серверүүд болон хөтчүүд заримдаа боловсруулж буй файлуудын дагаваруудыг шалгаж, шалгалтын үр дүнг хүлээн авснаар тэдгээрт янз бүрийн байдлаар хариу үйлдэл үзүүлдэг тул гүйцэтгэлийн асуудал үүсч болно. Жишээлбэл, өгөгдсөн серверийн кодыг PHP код гэж тайлбарлах ёстойг Apache тодорхойлохын тулд ballpage rendering скриптэд .php өргөтгөл өгөх шаардлагатай байж магадгүй (гэхдээ шаардлагатай боловсруулах горимыг тохиргооны файлуудыг ашиглан тохируулж болно).

Гэсэн хэдий ч, дамжуулсан толгой нь зураг дагаж байгааг харуулж байгаа ч .php файл нь зураг үүсгэх боломжийг харгалздаггүй вэб хөтчүүдийн стандарт бус хувилбарууд байдаг. Тиймээс, заасан аргыг ашиглахдаа скриптүүдийг шалгах шаардлагатай өөр өөр хөтөчХэрэглэгчдийн зорилтот үзэгчид хуудсуудыг таны хүссэнээр хүлээн авах болно гэдгийг анхаарна уу.

Зураг үүсгэхийн тулд gd номын санг ашиглах жишээг доор харуулав.

gd номын санг ашиглах жишээ: энгийн дүрс үүсгэх

Дараах жишээн дээр бид gd номын санг ашиглан энгийн геометрийн дүрс бүхий зургийг хэрхэн бүтээхийг харуулах болно.

gd номын санг ашиглах жишээ: фрактал зургууд

Зарчмын хувьд сонирхолгүй мэт санагдаж болох шугам зурах сэдвийн танилцуулгыг фракталуудыг жишээ болгон чимэглэдэг гайхалтай уламжлал аль хэдийн бий болсон. Доорх жишээ нь нарийн төвөгтэй дүрсийг программын аргаар хэрхэн бүтээхийг харуулахаас гадна PHP хэлний хүчийг сайн харуулах болно. Энэ хэлний массивууд болон хатуу тодорхойлогдоогүй өгөгдлийн төрлүүд нь олон тооны мэдэгдэл ашиглахгүйгээр фрактал зургуудад тохирсон нарийн төвөгтэй өгөгдлийн бүтцийг бий болгоход маш хялбар болгодог.

Фрактал бол өөртэйгөө төстэй геометрийн хэлбэр юм. Энэ нь фракталын хэсгүүд нь бүхэл бүтэн фракталтай төстэй хэлбэртэй, эдгээр хэсгүүдийн хэсгүүд нь ижил төстэй хэлбэртэй байна гэсэн үг юм.

Онолын хувьд хамгийн тохиромжтой фрактал нь ижил хэв маягийн давталтыг үргэлжлүүлэн илрүүлэхийн зэрэгцээ хязгааргүй олон удаа нэмэгдэж, жижиг, жижиг хэсгүүдийг үүсгэж болно. Гэвч бодит байдал дээр компьютерээр үүсгэгдсэн фракталууд нь хэсэгчилсэн хэлбэрийн зарим хязгаарлагдмал тооны үйлдлийг ашигласны дараа энгийн муруй ба шулуун шугамын сегмент гэх мэт фрактал бус хэлбэрт шилждэг.

Бидний бүтээхийг оролдох ийм төрлийн зургийн жишээг доорх зурагт үзүүлэв.

Мэдээжийн хэрэг, эхлээд харахад тасралтгүй муруй мэт сэтгэгдэл төрдөг боловч энэ зураг нь зүгээр л төгсгөлийн цэгүүд нь хаалттай тасархай шугам хэлбэрээр холбогдсон олон тооны жижиг шугамын хэсгүүдийн цуглуулга юм.

Бидний даалгавар бол эдгээр бүх шугамын хэсгүүдийн төгсгөлийн цэгүүдийн координатыг тооцоолж, дараа нь бүх сегментийг PNG хэлбэрээр зөв дүрслэх явдал юм. Бид фрактал зургийн нэг фрагментийг зүгээр л угсарч болох боловч бид өөрсөддөө илүү хэцүү даалгавар өгөхөөр шийдсэн - зөвхөн фрактал зургийн гаралтыг хангахаас гадна фрактал параметрүүдийг өөрчлөхөд хялбар болгодог жижиг дэд бүтцийг бий болгох. шинэ төрлийн зураг үүсгэх.

Эхлэхийн тулд бид харуулах боломжтой цогц хэлбэрийг дүрслэх боломжийг олгодог тодорхой өгөгдлийн бүтцийг бэлтгэх болно. Ийм өгөгдлийн бүтэц нь зөвхөн завсрын тооцоолол төдийгүй сегментийн зураглалыг өгөх ёстой бөгөөд тэдгээрийн байрлал, урт нь олж авсан эцсийн үр дүнгээр тодорхойлогддог. Эхлээд дур зоргоороо таамаглал дэвшүүлье:

  • координатын систем дэх цэгийг хос тоогоор өгсөн;
  • зам нь цэгүүдийн жагсаалт хэлбэрээр илэрхийлэгддэг.

Эцсийн эцэст, полилин зурахын тулд шугамын бүх цэгүүдийн хооронд шулуун шугамын хэсгүүдийг зурах шаардлагатай. Хэрэв нэг шугамын сегментийг зурах шаардлагатай байсан бол энэ ажлыг хоёр цэгийг дайран өнгөрч буй олон шугамыг зурах, тэгш өнцөгтийг зурах нь таван цэгийг дайран өнгөрч буй тасархай шугамын дүрсийг бүтээх гэж төсөөлж болно. эхлэх цэг нь тасархай шугаманд хоёр удаа тохиолдож, дахин гарч ирэхэд тэгш өнцөгтийг хаадаг). (Энэ тохиолдолд шулуун шугамын сегментийг анхдагч объект гэж үзэж болно, гэхдээ фрактал дүрсийг бүтээх асуудлыг шийдэхдээ тасархай шугам хэлбэрээр дүрслэх нь илүү товч юм.)

Одоо цэгүүд болон олон шугамыг хэрхэн төлөөлөх вэ гэсэн асуултыг авч үзье. Объектуудын жагсаалтыг харуулах хамгийн хялбар арга бол массив ашиглан PHP хэл юм. Иймд цэг нь хоёр тоо агуулсан массив, олон шугам нь цэгийн цуваа агуулсан массив гэдгийг үндэс болгон авч үзье. Энэхүү аргын үр дүнд олон хэмжээст РНР массив бүтцийг бий болгох хэрэгтэй, гэхдээ хэрэв бид санахад хялбар нэрээр бүтээгч болон туслах функцийг тодорхойлж чадвал эдгээр бүтэц ямар нарийн төвөгтэй байдгийг мартаж, кодыг ашиглан код боловсруулах боломжтой. Эдгээр бүтэц нь бодит өгөгдлийн төрлүүд юм шиг ийм үйлдлүүд.

Дээрх зурагт үзүүлсэн зургийг бүтээх кодыг доор өгөв. Энэ нь өгөгдлийн төрлийг үүсгэх функцээр нь тодорхойлдог (нэр нь make гэсэн угтвараас эхэлдэг). ), өгөгдлийн бүтцийн бүрэлдэхүүн хэсгүүдэд хандах функцууд, өгөгдөлд суурилсан зургийг харуулах функцууд (эдгээр функцүүдийн нэр нь угтвар дэлгэцээс эхэлдэг)). Энэ аргын тусламжтайгаар цэгүүдийг дэлгэцэн дээр гаргахгүй тул тэдгээрийн гаралтын функц байхгүй бөгөөд дараалсан хос цэгүүдийн хооронд шугамын сегментийг зурж полилин зурдаг.

Transform_path() функц нь анхны олон шугамын тодорхойлолтыг эхний параметр болгон авдаг бол хоёр дахь параметр нь олон шугамын тодорхойлолтыг параметр болгон авч, үр дүнд нь хувиргасан олон шугамын тодорхойлолтыг буцаадаг функцийн нэрийг авдаг. Transform_path() функцийн гуравдахь параметр нь шинэ полилин үүсгэхийн тулд нэг полилиныг нөгөө рүү хувиргах зорилгоор энэ функцийг дараалан хэрэглэх олон талт байдал юм. Хоёрдахь эрэмбийн функцийг нэвтрүүлэх нь зүйтэй гэж үзсэн шалтгаан нь эс бөгөөс шинэ фрактал үүсгэх бүрд илүү олон давталтын функц үүсгэх шаардлагатай болж магадгүй юм. Энэ аргыг ашигласнаар фрактал үүсгэх кодын өөр өөр хэсгүүдийг transform_path() функцэд шилжүүлж болох тусдаа функц болгон холбож, ажлын давхардлаас зайлсхийх боломжийг олгоно.

Баяжуулалтын функц нь polyline тодорхойлолтыг параметр болгон авч, хоёр цэгээр дамжсан шугамын сегмент бүрийг дунд нь оргил цэгтэй таван цэгээр дамждаг полилинээр солигдох өөр полилин тодорхойлолтыг буцаана. Мөн дээд малгайны функц нь ижил төстэй үйлдлийг гүйцэтгэдэг, зөвхөн үүссэн полилин нь зургаан цэгээр дамжин өнгөрч, үүссэн оргил нь тэгш өнцөгт хэлбэртэй байдаг. Нэмж дурдахад, энэ жишээ нь сегмент хоорондын өнцөг нь зөв байх стандарт хэмжээс бүхий полилин үүсгэх хэд хэдэн функцийг агуулдаг; Эдгээр функцийг төлөөлөх жишээ болгон ашиглахыг зорьсон.

Include файлуудаас бүх функцүүдийн тодорхойлолтыг ачаалсны дараа энэ код нь өгөгдсөн өндөр өргөнтэй gd дүрсийг үүсгэж, дараа нь энэ зурганд өнгө хуваарилагдана. (Арын дэвсгэр нь цагаан, шугамын хэсгүүд нь хар өнгөтэй байна.)

Фрактал дүрслэлийн кодын гүйцэтгэл нь таван цэгээр дамжин өнгөрч, дөрвөн (далд заасан) шугамын сегментийг багтаасан стандарт хаалттай тэгш өнцөгт полилин үүсгэхээс эхэлдэг. Дараа нь энэ polyline тодорхойлолтыг transform_path() функц руу залгах байдлаар polyline тодорхойлолтыг буцаах шаардлагатайг харуулсан параметрүүдээр дамжуулагддаг бөгөөд энэ нь өгөгдсөн тэгш өнцөгт дээр spike() функцийг дөрвөн удаа хэрэглэсний үр дүн юм. Хаалттай тэгш өнцөгт полилиныг хувиргах нь дөрвөн шугамын сегментийг боловсруулахаас эхэлдэг бөгөөд сегмент бүрийг дөрвөн сегментээр солино. Тиймээс дөрвөн дараалсан давталтын үр дүнд 16, 64, 256, 1024 сегментүүд үүсдэг.

Үүний дараа зөвхөн үүссэн цогц хаалттай полилиныг дэлгэц дээр харуулахад л үлддэг. Зурган дээрх бүх шугамын сегментийг зурахын тулд энэ кодонд тодорхойлсон display_path() функцийг дуудаж, PNG дүрсийг дагаж байгааг харуулсан HTTP толгойг дамжуулж, хувиргах, харуулахын тулд imagepng() функцийг дуудаж, дараа нь дотоод gd зургийн тодорхойлолтыг устгасан:

Эдгээр зургуудыг үүсгэх, үзүүлэхэд удаан хугацаа шаардагдах ба үүсгэсэн шугамын сегментийн тоо нэмэгдэхийн хэрээр цаг хугацаа ихсэх тул вэб сервер зураг дуусахаас өмнө скриптийг дуусгах боломжтой. Энэ нөхцөл байдлаас гарахын тулд та фрактал зураг үүсгэх кодын үе шатуудын тоог багасгах, эсвэл вэб сервер эсвэл PHP орчуулагчийн тохиргооны файлуудын завсарлагааны утгыг нэмэгдүүлэх боломжтой.

Мэдээжийн хэрэг, фрактал дүрс бүтээх кодыг турших нь урлагтай хиллэдэг бөгөөд энэ нийтлэлийн даруухан зохиогчид өөрсдийгөө жинхэнэ авъяаслаг зураачид гэж үздэггүй. Гэхдээ бид ийм зургуудыг сайжруулахад уншигчдад амжилт хүсч болно.

Ихэнх тохиолдолд өгөгдлийн график дүрслэл нь тухайн нөхцөл байдалд хамгийн тохиромжтой байдаг. Хэрэв диаграммууд нь интерактив бол энэ нь үнэхээр гайхалтай юм! Би юу гэсэн үг вэ? Диаграмын элемент дээр дарахад өөр диаграм нээгдэнэ.

Холбогдсон диаграммууд гэж юу вэ?

Өнөөг хүртэл ийм диаграммууд нь зөвхөн нэг өгөгдлийн урсгалтай тохирч, хоорондоо бүрэн холбогдоогүй байв. Хэрэв бид нааш цааш хөдөлж чадах диаграмм хийвэл яах вэ? Ийм диаграммуудыг холбогдсон диаграм гэж нэрлэдэг бөгөөд нэг эх сурвалжаас өгөгдөл гаргаж авах замаар олон түвшний диаграм үүсгэх боломжийг олгодог шинэ FusionCharts 3.2 багцын нэг хэсэг юм. Ийм диаграммд бүх зүйл хоорондоо холбоотой байдаг.

Энэ зааварт бид ийм диаграммуудыг жижиг төсөлд нэгтгэх талаар авч үзэх болно. MySQL мэдээллийн сан нь өгөгдлийг агуулж, PHP нь XML файл үүсгэх цавуу болж, FusionCharts нь тухайн файлыг авч өгөгдлийг гаргана.

Холбогдсон диаграммын талаар хэдэн үг:

  • Өгөгдмөл байдлаар, хүүхэд диаграм нь эцэг эхтэй ижил дэлгэцийн төрөлтэй (жишээ нь баганан диаграмм) байна;
  • Диаграмын төрлийг багтаасан шатлалын аль ч түвшинд нэмэлт тохиргоог нэмж болно;
  • Диаграмыг HTML контейнер, jQuey харилцах цонх, лайтбокс, extJS цонх гэх мэтээр байрлуулж болно;
  • JavaScript ашиглан үйл явдлыг дэмжих;

Бид юу хийхийг хүсч байна вэ?

Манай сайтын зочдын өсөлтийг хянах үүрэг олон удаа тулгарч байсан. Ингээд нэг сар/өдөр/цагт бүртгүүлсэн хэрэглэгчийн тоо, өөрөөр хэлбэл манай сайтад тодорхой хугацаанд бүртгүүлсэн хэрэглэгчдийн тоог харуулах жижиг төсөл бүтээцгээе.

Шаардлага:

  • PHP-тэй дурын вэб сервер;
  • Мэдээллийн сан бүхий MySQL сервер;
  • Та тэдний вэбсайтаас татаж авах эсвэл худалдан авах боломжтой FusionCharts;

Алхам 0. Бэлтгэл ажил

fctutorialc нэртэй хоосон мэдээллийн сан үүсгэ.

Вэб серверийнхээ үндэс дээр fcdemo нэртэй хоосон хавтас үүсгэ (ихэвчлэн www)

Алхам 1. Мэдээллийн санг бэлтгэх

Бүх зүйлийг энгийн байлгахын тулд бид зөвхөн хэрэглэгчийн мэдээллийг харуулах нэг хүснэгтийг ашиглах болно. Бид зөвхөн хэрэглэгчдийг бүртгэх цагийг л сонирхож байна. Тиймээс манай хүснэгт зөвхөн энэ мэдээллийг агуулсан болно. Энэ кодыг phpMyAdmin-д буулгана уу:

CREATE TABLE `хэрэглэгчид` (`ID` int(10) unsigned NO NULL AUTO_INCREMENT, `Time` цагийн тэмдэг NO NULL DEFAULT "0000-00-00 00:00:00", АНХДАГЧ ТҮЛХҮҮР (`ID`), ТҮЛХҮҮР `ЦАГ` (`Цаг`))

Бид ID болон цаг гэсэн 2 талбар бүхий хүснэгтийг үүсгэсэн. цаг нь хэрэглэгчийн бүртгэлийн цагийн талаарх мэдээллийг агуулна. Учир нь бид энэ талбарт индекс тавьсан гэдгийг анхаарна уу бид WHERE нөхцөлүүдийн багцыг ашиглах болно. Индекс нь дээж авах үйл явцыг хурдасгах боломжийг бидэнд олгоно.

Суурьтай холбогдож байна

Өгөгдлийн санд холбогдох жижиг скрипт бичье:

Тохиргоог өөрийн тохиргоогоор сольж, энэ файлыг connect-to-database.php нэрээр fcdemo хавтсанд хадгална уу.

Санамсаргүй өгөгдөл оруулах

Хэрэв энэ нь бодит төсөл байсан бол хэрэглэгчдийн хүснэгтийг цаг хугацааны явцад нөхөх болно, гэхдээ үзүүлэнгийн хувьд бид зарим өгөгдлийг оруулах хэрэгтэй. Хүснэгтэнд санамсаргүй өгөгдөл оруулах жижиг скрипт бичье. Хэрэв та дараах кодыг ойлгохгүй байвал санаа зовох хэрэггүй - энэ зааварт энэ нь чухал биш юм.

Энэ файлыг нэг хавтсанд Genere-random-data.php нэрээр хадгал.

Эхлээд бид мэдээллийн сангийн холболтын файлыг оруулна. Дараа нь бид хэрэглэгчийн бүртгүүлэх хугацааг санамсаргүй байдлаар сонгох хугацааг тохируулна. Та оруулах мөрийн тоог өөрчилж болно. Үүнийг хийхийн тулд та $RecordsToInsert хувьсагчийг өөрчлөх хэрэгтэй.

Дараа нь бид үүсгэсэн бичлэгүүдийг мэдээллийн санд оруулах скриптийг ажиллуулна. Энэ процессыг эхлүүлэхийн тулд энэ хаяг руу очно уу - http://localhost/fcdemo/generate-random-data.php.

Эцэст нь та "Оруулсан ($RecordsToInsert) бичлэгүүд" гэсэн мессежийг харах болно.

Алхам 2. Сайтын араг ясыг бэлтгэх

Бид хамгийн ихийг бүтээх хэрэгтэй энгийн хуудасМанай диаграмыг харуулах. Энэ нь иймэрхүү зүйл:

FusionCharts v3.2 - LinkedCharts PHP Демо

Энэ файлыг demo.html нэрээр хадгал:

  • Бүлэгт бид FusionCharts.js JavaScript номын санг агуулдаг. Та үүнийг FusionCharts zip файлын Charts хавтаснаас олох боломжтой.
  • Бүлэгт Бид диаграмдаа зориулж контейнер үүсгэсэн.
  • Бид FusionChart объектыг дараах параметрүүдээр эхлүүлдэг жижиг кодыг үүсгэсэн.
    • Charts/Column3D.swf - swf файлын хаяг. Энэ жишээнд бид Column3D диаграмыг ашиглах болно.
    • myChartId нь диаграмын ID юм. Хэрэв бид нэгээс олон диаграмм үүсгэж байгаа бол энэ нь шаардлагатай.
    • Дараагийн 2 параметр нь диаграмын өргөн ба өндөр юм.
  • myChart.setXMLUrl("get-data.php?year=2010"); - мэдээллийн эх сурвалжийг тодорхойлно. Энэ мөр нь өгөгдлийг get-data.php?year=2010 хуудасны XML файлаас авах болно гэдгийг хэлж байна. Бид энэ алхамыг дуусгасны дараа get-data.php файлыг бичих болно.

Тиймээс бид FusionCharts багцаас 2 файл ашигласан. Бүх зүйл ажиллахын тулд та тэдгээрийг fcdemo/Charts хавтсанд оруулах хэрэгтэй.

Алхам 3. Арын төгсгөлийг бэлтгэ

FusionCharts нь XML эсвэл JSON форматтай өгөгдөлтэй ажилладаг. Бид XML форматыг илүү олон үзэгчдэд танил болсон тул ашиглах болно. Өгөгдлийн файл нь зөвхөн диаграмын баганын мэдээлэл төдийгүй гарчиг зохиох элементүүдийг агуулж болно. Бид системээ PHP нь мэдээллийн сангаас мэдээлэл уншиж, дараах төрлийн XML файл үүсгэдэг байхаар болгох хэрэгтэй.

Мэдээлэл ийм байх ёстой. Диаграмын шошго нь бүх статистик мэдээллийг агуулсан байх ёстой. Нэмж дурдахад та дизайн, гарчгийг хариуцдаг бусад шошгыг харж болно.

Одоо өгөгдлийн сангаас өгөгдөл авч XML файл үүсгэх get-data.php файлыг үүсгэцгээе:

"; //Графикийн XML биеийг үүсгэнэ: foreach($ResultArray гэж $key => $val) // түлхүүр нь сарын дугаар (1-12) $Output .= " "; //XML $Output диаграммыг хаах .= ""; //XML толгой хэсгийг тохируулах("Агуулгын төрөл: текст/xml"); //Цуурай $Output илгээх; ?>

Энэ файлыг get-data.php нэрээр хадгал. Кодтой танилцъя:

  • Юуны өмнө бид ирж буй өгөгдлийг шүүнэ $_GET["year"];
  • Дараа нь бид тухайн жилд манай сайтад бүртгүүлсэн хэрэглэгчдийн тоог тоолдог. Үр дүнг GROUP BY ашиглан бүлэглэв.
  • Дараа нь бид сарын тооноос бүрдэх $ResultArray массивыг үүсгэнэ.
  • Графикийн нэрийг X-Axis хувьсагч руу бичнэ.
  • Бид мэдээллийн санд холбогдож хүсэлт гаргадаг.
  • Дараа нь бид үр дүнг мөр мөрөөр нь массив болгон хуулна. Хэрэв хүсэлтийн үр дүнд бүртгэлтэй хэрэглэгч олдохгүй бол бид 0 утгыг харуулахыг хүсч байна. Тийм учраас бид $ResultArray массив дээр тэг бичсэн. Энэ нь массивыг эрэмбэлэх шаардлагатай.
  • Дараа нь бид XML файлын толгой хэсгийг үүсгэнэ. Бид диаграмын талаар шаардлагатай бүх мэдээллийг $ChartHeading дээр бичдэг. Энд бид шаардлагатай бүх гарчиг, өнгийг тохируулсан.
  • Дараа нь бид $Output хувьсагч руу тэмдэгт мөрүүдийг нэгтгэн XML файлынхаа биеийг бэлтгэдэг. Тэнд байгаа бүх зүйл нь шошго юм .
  • XML баримт бичгийг дуусгахын тулд бид шошгоор хаадаг .
  • Бид мөн агуулгын төрлийн утгыг тохируулсан бөгөөд ингэснээр програм нь ямар форматтай ажиллах шаардлагатайг ойлгох болно.

Үүсгэсэн XML кодыг харахын тулд http://localhost/fcdemo/get-data.php?year=2010 руу орно уу.

Та энэ алхамын эхэнд харсан зүйлтэйгээ адилхан зүйлийг харах ёстой.

Оролдоод үзье

Одоо бүх зүйл бэлэн болсон тул бид жишээгээ туршиж үзэх боломжтой. Хөтөчөө нээгээд http://localhost/fcdemo/demo.html руу очно уу.

Хэрэв та бүх зүйлийг зөв хийсэн бол таны хуудсан дээр дараах диаграмм гарч ирнэ.

Алхам 4. Бидний диаграммыг холбогдсон диаграм болгон хувиргах

Бидний диаграммыг холбогдсон диаграм болгон хувиргахын тулд бид ямар параметрийг хүүхдийн диаграм руу шилжүүлэхээ шийдэх хэрэгтэй. Бид өгөгдлийн мөр эсвэл өгөгдлийн URL-г бүхэлд нь дамжуулж болно. Хэрэв та эхний тохиолдлыг сонговол хүүхэд бүрийн өгөгдлийг эцэг эхийн диаграммд оруулах бөгөөд тэдгээрийн хоорондын хамаарал нь өвөрмөц танигчаар үүснэ. Манай тохиолдолд бид олон төрлийн графиктай (12 сар, 30 хоног, 24 цаг). Тиймээс бид өгөгдлийг дамжуулахын тулд url мөрийг ашиглах болно. Тиймээс бидний хийх ёстой зүйл бол холболтын цэгүүд дэх URL-ууд руу өгөгдлийг холбох явдал юм (товшилтыг дарахад шинэ диаграмыг нээх халуун цэгүүд).

PHP кодыг сайжруулцгаая:

Бид сар, өдөр, цагаар сонгох шаардлагатай тул РНР кодыг бага зэрэг өөрчлөх хэрэгтэй. Эхлээд үүнийг харцгаая, дараа нь бид үүнийг хэсэг хэсгээр нь задлах болно.

"; // Диаграмын XML биеийг үүсгэнэ үү: switch($Type) ( өгөгдмөл: case "monthly": foreach($ResultArray as $MonthNumber => $value) // Сар (1-12) $Output .= " "; завсарлага; case "daily": foreach($ResultArray as $DayNumber => $value) // Өдөр (1-31) $Output .= " "; завсарлага; "цаг тутамд" тохиолдол: foreach($ResultArray as $HourNumber => $value) // Цаг (0-23) $Output .= " "; завсарлага; ) // XML-г хаах: $Output .= ""; // XML толгой хэсгийн толгой хэсгийг тохируулах("Агуулгын төрөл: текст/xml"); // $Output echo илгээх; ?>

Бид юу өөрчлөгдсөн бэ?

  • Одоо бидэнд хэд хэдэн төрлийн график байгаа тул диаграмын төрлийг $_GET-ээр дамжуулан бидэнд дамжуулах болно. $Month болон $Hour болон $Year-тай адил;
  • Дараа нь бид саруудын нэрийг агуулсан $MonthNames массивыг үүсгэнэ. Массив тэгээс эхэлдэг тул эхний элемент нь null байна;
  • Одоо төрлөөс хамааран $Query, $ResultArray, $ChartHeading болон $XAsixName хувьсагчдыг шилжүүлэгчд хуваарилсан. Хэрэв $Type-г тохируулаагүй бол анхдагчаар сарууд харагдах болно;
  • Дараа нь бид мэдээллийн санд холбогдож, хүсэлтийг гүйцэтгэж, үр дүнг массив болгон хуулж, xml файлын эхний хэсгийг үүсгэнэ;
  • Дараа нь бид XML файлын биеийг үүсгэдэг. Их бие нь диаграмын төрлөөс хамаардаг тул бид шилжүүлэгчийг дахин ашигладаг;
  • Сарууд: холбоосоос бусад нь бүгд адилхан. Одоо энэ нь иймэрхүү байх болно: newchart-xmlurl-get-data.php; newchart - бид шинэ диаграмм үүсгэж байгааг харуулж байна, xmlurl - ямар хаягаар өгөгдөл хайх хэрэгтэй. Дараах бүх зүйл URL-ийн нэг хэсэг юм. 1-р сарын бүтэн холбоос энд байна: newchart-xmlurl-get-data.php?type=hourly&Year=2010&Month=1
  • Өдөр: URL-д тухайн өдрийн талаарх мэдээллийг агуулж байгаагаас бусад нь сарынхтай адил;
  • Цаг: Хэрэв бид энэ диаграмын дараа өөр диаграмм оруулахыг хүсэхгүй байгаа бол бид түүнд URL заагаагүй болно;
  • Эцсийн эцэст бид XML-ийг хаадаг;

Энэ файлыг get-data.php нэрээр хадгал; Одоо хөтөч нээгээд скриптийг шалгана уу. Жишээ нь: http://localhost/fcdemo/get-data.php?year=2010

Та иймэрхүү зүйлийг харах ёстой:

Туршилт

Одоо бид диаграммуудыг бүрэн дуусгасан. Ажлыг шалгахын тулд http://localhost/fcdemo/demo.html руу очно уу

Хэрэв та бүх зүйлийг зөв хийсэн бол хуудсан дээр Column3D диаграммыг харах болно. Хэрэв та аль нэг багана дээр дарвал шинэ диаграм нээгдэнэ. Гэх мэт...

Дүгнэлт

Хэрэв та энэ хичээлийг сайтар судалсан бол PHP / MySQL-д холбогдсон диаграммуудын талаар ерөнхий ойлголттой болсон байх магадлалтай. Дараах статистикийн хувьд яг ижил диаграммыг хийж болно.

  • Тодорхой хугацааны борлуулалтын тоо;
  • Танай сайт хэдэн удаа ажиллахаа больсон;
  • Тодорхой хуудсанд зочилсон хүмүүсийн тоо;

Диаграммын бүтэц нь ямар ч сэдвийн хувьд ижил байх болно. Өгөгдлийн сангаас мэдээлэл авахын тулд зарим параметрийг ашиглаад хариуг XML болгон хувиргаж, диаграм бэлэн боллоо!

Илүү их урам зориг авахыг хүсвэл энэ демо хуудсанд зочилж болно. Анхаарал тавьсанд баярлалаа!

PHP дээр график зурах нь хоёр аргаар боломжтой. Та өөрөө зурж эсвэл номын сан ашиглаж болно. Би өөрөө график хэрхэн бүтээх талаар сурахыг санал болгож байна. Нэгдүгээрт, сайн номын сангууд төлбөртэй байдаг. Хоёрдугаарт, аливаа номын санг ашиглахдаа та түүний функцээр хязгаарлагддаг. Графикуудыг өөрөө зурах нь дээр.

Хамгийн энгийн сонголтоос эхэлцгээе. 5 хоногийн дотор сайтад бүртгүүлсэн хэрэглэгчдийн тоог агуулсан массив байна.

$mas = массив(2, 7, 20, 9, 14);

Энэ массивыг хуудсан дээр график хэлбэрээр үзүүлье. Эхлээд координатын тэнхлэгүүдийг зуръя.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Сэтгэгдэл:

3 - зураг үүсгэх

7, 8 - x ба y тэнхлэгүүд

9-13 - x тэнхлэг дээрх серифүүд

14-18 - х тэнхлэг дээрх тоонууд

19, 20 - y тэнхлэг дээрх серифүүд

21, 22 - у тэнхлэг дээрх тоонууд

Зураг нь дараах байдлаар харагдах ёстой.

График дээр шугам зурахын тулд та түүн дээрх цэгүүдийг олох хэрэгтэй бөгөөд үүний дагуу шугамыг зурах болно. Практикт та тэр даруй цэгийг олж, түүний дагуу шугам зурж болно. Гэхдээ жишээг илүү ойлгомжтой болгохын тулд бид асуудлыг хоёр хэсэгт хуваана. Эхлээд бүх цэгүүдийг олж, дараа нь тэдгээрийн үндсэн дээр график зур. Үүнийг хийхийн тулд бид хоёр хэмжээст массив үүсгэх бөгөөд энэ нь цэг бүрийн х, у координатыг агуулсан болно. Координатыг олохын тулд бидэнд лавлах цэг хэрэгтэй. Энэ бол координатын тэнхлэгүүдийн огтлолцох цэг юм. Манай зурган дээр энэ нь x: 50, y: 250 пикселийн координатуудтай. Цэг бүрийн байрлалыг тодорхойлохын тулд та графикийн масштабыг ашиглах хэрэгтэй. Жишээн дээр бид масштабыг өөрсдөө тогтоодог. X тэнхлэг дээр өдөр бүр 100 пикселийг үүсгэдэг. Эхний өдөр нь эх үүсвэрээс 100 пикселийн зайд, хоёр дахь нь 200 пикселийн зайд гэх мэт. Тэгэхээр эхний өдрийн х координат 50 + 100 = 150. Хоёр дахь өдөр 50 + 200 = 250 байна.

Y тэнхлэгт 10 хэрэглэгч тутамд 100 пикселийг хуваарилдаг. Нэг хэрэглэгчдэд зориулсан хэрэгсэл - 10 пиксел. Зургийн y тэнхлэг нь доош чиглэсэн байдаг бөгөөд энэ нь лавлагааны цэг дээр утгыг нэмэх шаардлагагүй, харин хасах хэрэгтэй гэсэн үг юм. Эхний өдөр сайтад 2 зочин бүртгүүлсэн. Энэ утгын координат нь 250 - (2 * 10) = 230. Хоёр дахь өдөр 250 - (7 * 10) = 180. Тиймээс цэгүүдийн координат бүхий массив дараах байдалтай байна.

График дараах байдлаар харагдаж байна.

Бид хуйвалдааны хамгийн энгийн хувилбарыг авч үзсэн. Би хэдэн өдрийн тоо, хэрэглэгчийн дээд хязгаарыг урьдчилан мэдэж байсан. Тиймээс би өөрөө графикийн масштабыг сонгосон. Гэхдээ ихэвчлэн эдгээр өгөгдөл өөр байж болох тул масштабыг тооцоолох шаардлагатай байдаг. График нь өөрөө арай өөр харагдаж байна. Бид координатын тэнхлэгүүд тэгээс эхэлдэг гэдэгт дассан. Гэхдээ дэлгэцийн тав тухтай байдлыг хангах үүднээс энэ дүрмийг заримдаа хүндэтгэдэггүй. Х тэнхлэг нь 0-ээс биш, 1-ээс эхэлдэг тул шугамын зүүн талд хоосон зай байхгүй болно. Мөн y тэнхлэгийг харуулсан бөгөөд ингэснээр бүх утгууд диаграммд тохирно. Жишээлбэл, хамгийн бага утга нь 60, хамгийн их утга нь 70 бол y тэнхлэг нь тухайн мужийг агуулна. Ийм график үүсгэх талаар бодож үзээрэй.

Жишээн дээр x тэнхлэг нь 570 пикселийн урттай байна. Үүнийг өдөр бүр ижил сегментүүдэд хуваах шаардлагатай. Х тэнхлэг нь 0-ээс биш, 1-ээс эхэлдэг. Тиймээс 0-ээс 1-ийн хооронд хэрчмүүд байхгүй бөгөөд сегментийн тоо 1-ээр бага болно. Хэрэв 5 хоног байвал 4 сегментийг авна. Сегментийн уртыг тооцоолох томъёо нь:

урт = тэнхлэгийн урт / (өдрийн тоо - 1)

Тоо нь бутархай болж хувирах тул үр дүнг доош нь дугуйлах ёстой.

570 - 50 нь x тэнхлэгийн урт юм. Энэ нь зургийн хэмжээнээс хамаарна.

Бид y тэнхлэгийг бүх утгыг тохирохуйцаар хийдэг. Та хамгийн бага ба хамгийн их утгыг авах хэрэгтэй. Тэд графикийн өндрийг бүхэлд нь авах ёстой. Хүрээг мэдсэнээр бид график дээрх нэг хэрэглэгчтэй хэдэн пиксел тохирох ёстойг тооцоолж болно.

хүрээ = хамгийн их - хамгийн бага

урт = тэнхлэгийн урт / хүрээ

Үүссэн тоог мөн дугуйруулах шаардлагатай.

Маш олон удаа, зарим үйлчилгээг бий болгохдоо та хийх хэрэгтэй янз бүрийн график зурах. Жишээлбэл, хэрэв та зар сурталчилгааны сүлжээ үүсгэж байгаа бол зар сурталчилгааны материал дээр өдөр бүр товшилтын тооноос хамаарлыг бий болгож чадна. Хэрэв энэ нь ямар нэгэн онлайн дэлгүүр юм бол та дэлгүүрийн орлогын графикийг үүсгэж болно. PHP дээр хэрхэн график зурах вэБи доор дэлгэрэнгүй ярих болно.

Нэгдүгээрт, та өөрийн номын сангаа бичснээр бүх зүйлийг өөрөө хийх боломжтой. Энд үүнийг анхаарч үзэх хэрэгтэй PHP дээрх координатууд дээшээ доошоо явдаг, харин дотор математик тэд баруун тийшээ дээшээ явдаг. Үгүй бол онцгой төвөгтэй зүйл байхгүй.

Гэсэн хэдий ч, хэрэв та үнэхээр бичих хүсэлгүй байгаа бол маш олон төрлийн график, диаграмм, гистограмм гэх мэтийг бүтээх боломжийг олгодог гайхалтай номын сан байна. Олон янзын функцууд (тэнхлэгт гарын үсэг зурах, нэг тэнхлэгт хэд хэдэн график зурах, босго зурах, домог харуулах гэх мэт) нь энэхүү номын санг үнэхээр бүх нийтийнх болгодог.

Номын сан гэж нэрлэдэг pChart: .

Би танд жишээ хэлье:

/* Ангиуд оруулах */
require_once "pChart/pData.class";
require_once "pChart/pChart.class";
$DataSet = шинэ pData(); // pData объект үүсгэх
$DataSet->AddPoint(массив(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100), "Serie1"); // Диаграмын өгөгдлийг ачаалах 1
$DataSet->AddPoint(массив(0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000), "Serie2"); // Диаграмын өгөгдлийг ачаалах 2
$DataSet->AddAllSeries(); // Барилгын бүх өгөгдлийг нэмнэ
$Тест = шинэ pChart(700, 230); // Графикийн хавтгайг зурах
$Test->setFontProperties("Fonts/tahoma.ttf", 8); // Фонтыг тохируулна уу
$Test->setGraphArea(50, 30, 585, 200); // Диаграмын талбарыг тохируулах
$Test->drawFilledRoundedRectangle(7, 7, 693, 223, 5, 240, 240, 240); // Тэгш өнцөгт бүхий хавтгайг сонгоно уу
$Test->drawRoundedRectangle(5, 5, 695, 225, 5, 230, 230, 230); // График хавтгайн контурыг хийнэ
$Test->drawGraphArea(255, 255, 255, үнэн); // Графикийн хавтгайг зурах
$Test->drawScale($DataSet->GetData(), $DataSet->GetDataDescription(), SCALE_NORMAL, 150, 150, 150, үнэн, 0, 2); // Тэнхлэг ба график зурах
$Test->drawGrid(4, үнэн, 230, 230, 230, 50); // Сүлжээг зур
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription()); // Графикийн цэгүүдийг шугамаар холбоно
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(), 3, 2, 255, 255, 255); // Цэг зурах
$Test->drawTitle(50, 22, "сайт", 50, 50, 50, 585); // Графикийн гарчгийг харуулна
$Test->Stroke(); // Хөтчийн цонхонд диаграмыг харуулах;
?>

Энэ жишээнд бид парабол болон куб параболыг бүтээж, дараа нь энэ графикийг хөтөч дээр харуулав. Үүний оронд та графикийг файлд хадгалах боломжтой Цус харвалт()аргыг хэрэглэх ёстой Render("файлын нэр.png").