Чи мэднэ дээ хөгшөөн би ийм юм үзээгүй удаж байна. Тэр ч байтугай анимэ уях ёстой юм шиг санагдсан. Хөгшрөлт нь үл үзэгдэх болж, эдгээр бүх сэлэмтэй хөвгүүд, эрч хүчтэй үстэй охидууд тасралтгүй наалдамхай масс руу нийлэв. Бүх дүрүүд зөвхөн тэнэг, чанга дуугаар, зөвхөн мөнхийн тухай ярьдаг юм шиг санагдаж эхлэв. Бүх зүйл залуу насны галзуу солиотой механик уран зөгнөлөөр дүүрэн байна, хөөе! .. "Театр ..."-ыг олсондоо ямар их баяртай байна. Энэ юу шиг харагдаж байна? Бид түүнийг харж дассан шиг - тийм ч их биш. Энэ нь ямар нэгэн зүйл зурах - тийм ээ, мэдээжийн хэрэг. Тэгээд сэтгэл санааны хувьд “” дээр илүү “татдаг” байх. Эсвэл "амьдрал шиг" хуучин Гүржийн богино хэмжээний кинонуудыг (санаж байна уу?) Янз бүрийн хүмүүс, залуу, эсрэгээрээ, тэд ярилцаж, амьдардаг, бие биенээ мэддэг, ажилладаг ... Мэдээжийн хэрэг, зарим нэг чухал мөчийг хамгийн энгийн зүйл биш, харин үйл явдлын төлөө авдаг. Гэхдээ энэ маш чухал мөч бол анхны үнсэлт биш, ид шидийн хүчийг олж авахгүй, жишээлбэл, олон жилийн дараа ангийнхантайгаа уулзах, эсвэл өндөр цалинтай ажлаас халагдах, хадам ээжтэйгээ уулзах зэрэг нь ямар сайхан байдаг вэ. "30 наснаас хойш амьдрал байдаг уу?" Тийм үү? Би байдаг гэж бодох дуртай. Румико Такахаши ч бас тэгж боддог нь надад таалагдаж байна.
Битгий хашгир, зулзага, би удаан хүлээхгүй. Би аль хэдийн шалгаж байна. Ерөнхийдөө "миний компьютер" гэж юу гэсэн үг вэ? Тэгээд минийх хаана байна? .. Эцсийн эцэст би бас заримдаа ганц хоёр анимэ үзэх хэрэгтэй болдог. Хараач, тэр "" ба "" бүгдийг дүүргэсэн ... Би амьдралдаа нэг удаа тайван асууж болох уу ?! Би юу харж байна вэ? Румико Такахаши театр, тэнд хайрцагнууд байна... Яах гэж туулай гэж? Нэгдүгээрт, энэ бол хог биш, 2003 он, хоёрдугаарт, "" чамд таалагдаж байна, "" та дуртай уншсан - мангака нь адилхан, гэхдээ чи ур чадвараа алдахгүй, финч. Такахаши-сан зурж, сонирхлыг нь маш сайн мэддэг...Тэгвэл цуврал яагаад ийм богино байдаг юм бэ? Энэ бол цуврал биш, энэ бол тусдаа өрнөлтэй, өөр өөр дүр бүхий богино хэмжээний киноны багц юм. Инээдтэй эсвэл нулимстай юу? Мөн тэдгээр, мөн тэдгээр нь - "жүжиг", "инээдмийн", "өдөр тутмын амьдрал" гэж бичсэнийг харж байна уу ... Та "өдөр тутмын амьдралд" дургүй юу? Битгий ингэж ярь, бяцхан топ, тэгэхгүй бол тэр ч бас чамайг хайрлахгүй. Өдөр тутмын зөв дэглэм бол агуу зүйл юм! Японы Хрущевт хөршөөсөө оцон шувууг хэрхэн нууж байсныг танд үзүүлье. Хүүхэд насных шигээ ээждээ Сериюшка өг, тэгээд би оройн хоолоо хийж өгье, за юу? ..
Би зүгээр л уйлсан, хараал ид! Би ийм зүйлд орж чадна гэж бодсонгүй! Тэгээд инээдтэй юм, бурхан минь, инээдтэй, тэр тусмаа ухаан алдаж унасан хөгшин эмэгтэй яагаад түүнийг дахин амьдруулсныг хайж байгаа тухай. Түүний энэ түүхийн өмнөх хайрын түүх өөр өөр нүдээр: тэр өөрийнхөө тухай хэрхэн ярьдаг, яаж - түүний сэдэв; юу гэж нэрлэдэг вэ, "ялгааг мэдэр!". Тэгээд хөгшин эмэгтэйн хөл хугарч, би зүгээр л эмзэглэлээс дэрээ хазав! .. Мөн хуримын ордны тухай цуврал! Би жинхэнэ романтик түүхүүдэд маш их дуртай, бүх зүйл дур булаам өнгөлөгчөөс гялалзсан үед биш, харин амьд хүнийг үнэхээр өрөвдөж чаддаг. Хөгширсөн эхнэр, нөхөр хоёрын тухайд эдгээр харамслыг маш сайн илэрхийлж, залуучуудыг баригдашгүй, аль хэдийн мангар сүүлээр нь барьж авах оролдлого ... бүх зүйл маш ухаалаг, сайхан төгсдөг. Би бүр бодсон: магадгүй миний өвөг дээдэс бие биедээ огт хайхрамжгүй ханддаггүй, гэхдээ тэд нас ахих тусам үүнийг хэрхэн харуулахаа мартсан байх ...
Шөнөдөө олон ангит кино үзэж байна. Аажмаар. Тэд маш өөр, та тэдгээрийг холихыг хүсэхгүй байна. Та янз бүрийн газар очиж байгаа юм шиг байна. Мөн сэтгэл санаа нь огт өөр, сэтгэгдэл. Үгүй Танд таалагдахгүй байх магадлалтай. Учир нь ямар ч сонирхолтой зүйл байхгүй. Тэгээд сюрреалистбас. Тэгээд ч "сэтгэлзүй" - "Хэцүү хүүхэд нас, витамин дутагдалтай байсан ч цагтаа тоглоомын хүү худалдаж авах байсан, новшнууд, та нар харж байна, маньяк алуурчин болохгүй" - үгүй. Мөн онцгой сургамжтай зүйл алга. Ийм зүйл үндсэндээ юу ч заадаггүй. Өөр хэн нэгний амьдрал юу зааж чадах вэ? Тэр ч бас тэнд байгаа болохоор л. Та үүнийг тооцоолохыг оролдож болно ... Эмгэг, өндөр тэмдэглэлгүйгээр. Жүжиг ч биш шүү дээ? Карлсон хэлэхдээ: "Өчүүхэн зүйл бол амьдралын асуудал!". Энэ бүхэн бол амьдралын зүйлс. аяндаа. Бид мэргэжлийн алуурчид болон бусад бэлэвсэн эхнэрүүдийг өрөвдөх сэтгэлээр буруутгагддаг тул бичиг хэргийн ажилтан эсвэл гэрийн эзэгтэйтэй харамсах нь ямар нэгэн муухай зан юм ... тийм ээ, би чамд ёс суртахуун уншдаггүй, үүнийг хас . Та асуусан - би хариулсан. Алив, шинэ бүтээгдэхүүнийнхээ талаар яриач. Тэгээд “Театр...” дуусаад л авна. Энэ нь дарс шиг, түүнийг залгих боломжгүй юм. Сүүдэр нь хүрэхгүй, эсвэл амт нь түрхэх болно. Энэ нь ичмээр байх болно ...
Вэб хувилбарт график үүсгэх хэрэгслийн хамрах хүрээг тодорхойлохын тулд дараах цувралыг анхаарч үзээрэй сонголтуудграфик хэрэглээ:
- Өөрийнхөө бүтээсэн эсвэл хаа нэг газраас зээлсэн статик зургуудыг HTML хуудсанд суулгаж болно.
- Програмаар үүсгэсэн зургуудыг (HTML + CSS) ашиглаж болно.
- Та gd номын санг ашиглан скриптийг гүйцэтгэх явцад гарч болох бүх нөхцөл байдалд статик график дүрсийг урьдчилан үүсгэж, файлд хадгалж, нөхцөлөөр нь харуулах боломжтой.
Бид графикийг хялбаршуулсан тул статик дүрс ашиглан хэрэгжүүлэх сонголтыг авч үзэхгүй тул эхлээд энгийн сонголтыг (HTML + CSS график), дараа нь PHP дээр gd номын санг ашиглах талаар авч үзэх болно.
HTML + CSS график
Вэбсайтад зочилсон хүмүүс өнгөт талтай хэвтээ зураасыг мэддэг бөгөөд энэ нь ялангуяа судалгааны үр дүнг харуулахад түгээмэл байдаг. Эхлээд харахад хүн ямар нэгэн юм шиг сэтгэгдэл төрүүлдэг график тусламж, гэхдээ бодит байдал дээр хэд хэдэн энгийн скрипт ашиглахад хангалттай:
" . $ex->getMessage() .""; } } ?>
Захиалгын хуудас
Та захиалсан:жүрж:Алим:
Банана:
Улаан лооль:
Өргөст хэмх:
Төмс:
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. Сайтын араг ясыг бэлтгэх
Бид хамгийн ихийг бүтээх хэрэгтэй энгийн хуудасМанай диаграмыг харуулах. Энэ нь иймэрхүү зүйл: