Grafika izveide, izmantojot GD bibliotēku. Grafiku zīmēšana PHP Ko mēs mainījām

Lai noteiktu grafikas rīku lietojumu tīmekļa scenārijos, apsveriet šādus iespējamos grafikas lietošanas gadījumus:

  • Statiskus attēlus, kas izveidoti neatkarīgi vai kaut kur aizgūti, var iegult HTML lapā.
  • Var izmantot programmatiski ģenerētus attēlus (HTML + CSS).
  • Varat izmantot gd bibliotēku, lai iepriekš izveidotu statisku grafiku visām iespējamām situācijām, kas rodas skripta izpildes laikā, saglabātu to failos un parādītu nosacīti.

Mēs neapsvērsim iespēju ieviest grafiku, izmantojot statiskus attēlus tās vienkāršības dēļ, tāpēc vispirms mēs apsvērsim vienkāršu iespēju (HTML + CSS grafika), un pēc tam apsvērsim gd bibliotēkas izmantošanu PHP.

Grafika HTML + CSS

Vietnes apmeklētājiem ir zināmas horizontālās joslu diagrammas ar krāsainām malām, kuras īpaši bieži izmanto aptauju rezultātu ilustrēšanai. No pirmā acu uzmetiena šķiet, ka šādu diagrammu izveidošanai tiek izmantoti kaut kādi grafiskie rīki, taču patiesībā pietiek ar dažu vienkāršu skriptu izmantošanu:

Darbs ar grafiku PHP, HTML, CSS /* CSS stili, kas veido dizainu */ body div ( augstums: 1em; displejs: inline-block; vertikālā līdzināšana: vidū ) span ( displejs: inline-block; platums: 120 pikseļi) .apelsīns ( fons: oranžs ) .ābols ( fons: #33CC66 ) .banāns ( fons: dzeltens ) .tomāts ( fons: sarkans ) .gurķis ( fons: zaļš ) .kartupelis ( fons: pelēks ) Pasūtījuma forma Augļi Apelsīni Āboli Banāni Dārzeņi Tomāti Gurķi Kartupeļi

Šis piemērs neparāda nekādas jaunas PHP funkcijas, bet vienkārši parāda vienkāršu veidu, kā izveidot grafiku, izmantojot HTML un CSS (šajā gadījumā joslu diagrammas):

gd bibliotēka

Iepriekšējā sadaļā aprakstītie grafikas rīki praktiski izsmeļ standarta HTML koda iespējas (lai gan ir vērts atzīmēt, ka mēs neaptvērām diezgan jaudīgo HTML5 Canvas grafikas izveides rīku). Tagad pāriesim pie metožu aprakstīšanas patiesi patvaļīgas grafikas izveidei, izmantojot gd bibliotēku.

Gd bibliotēkas vispārīgs apraksts

Vispārīgi runājot, gd rīkkopa ir C koda bibliotēka attēlu izveidei un apstrādei. Šo bibliotēku sākotnēji izstrādāja un sabiedrībai darīja pieejamu Boutell.com talantīgie un dāsnie darbinieki.

Pati gd bibliotēka nav grafikas vai zīmēšanas programma, kā arī tā nav atsevišķa lietojumprogramma vai grafiskais lietotāja interfeiss. Tā vietā gd bibliotēka nodrošina funkcijas, kuras var izsaukt jebkura programma, lai veiktu vēlamo attēla manipulāciju. Tas nozīmē, ka gd bibliotēku var saistīt ar jebkuru C programmu, kurā nepieciešams izmantot šīs bibliotēkas kodu. Tieši šo problēmu atrisināja PHP sistēmas izstrādātāji.

Faktiski šim nolūkam ir izveidots interfeisa funkciju kopums, kas atvieglo gd procedūru izsaukšanu no PHP skripta. Taču pašā gd bibliotēkā nav neviena PHP specifiska koda, un ir izstrādātas saskarnes, lai bibliotēkai varētu piekļūt no vairākām citām programmēšanas valodām un programmēšanas vidēm, tostarp Perl, Pascal, Haskell un REXX.

Gd bibliotēka ļauj izsaukt funkcijas, lai izveidotu avota attēlus (sākotnēji tukšus, kas atgādina tukšu papīra lapu), zīmēt un krāsot šajos avota attēlos dažādos veidos un galu galā pārveidot attēlu no gd iekšējā attēla formāta uz standarta. attēla formātā un pēc tam nosūtiet to uz galamērķi (izvadiet pārlūkprogrammas logā vai saglabājiet failā vai datu bāzē). Un tā kā visas šīs darbības tiek veiktas programmas kontrolē, nevis manuāli, izveidotie attēli var kļūt tik sarežģīti, cik vēlaties, un atkarīgi no jebkurām situācijām programmas izpildes laikā, no kurām vēlams tos padarīt atkarīgus.

Attēlu formāti

Gd bibliotēka pamatā ļauj importēt un eksportēt attēlus, izmantojot dažādus formātus. Populārākie attēlu formāti ir GIF, JPEG un PNG, lai gan izmantotajos piemēros galvenokārt tiek izmantoti pēdējie.

GIF un PNG formāti ir paredzēti, lai aprakstītu pikseļiem atbilstošu krāsainu elementu režģi ar dažiem papildinājumiem. Pirmais papildinājums ir tāds, ka šūnas var saturēt faktiskos krāsu numurus vai indeksus krāsu skaitļu tabulā. (Pirmā opcija ļauj izveidot izteiksmīgākus attēlus, jo tā ļauj nodrošināt neierobežotu skaitu dažādu krāsu, un pēdējā opcija palīdz izveidot kompaktākus attēlus.)

Otrais papildinājums ir šāds. Protams, GIF un PNG formātu konceptuālais attēlojums ir diezgan vienkāršs, taču praksē attēlu lasīšana, rakstīšana un pārsūtīšana šajos formātos vienmēr notiek saspiestā veidā. Saspiešana ir nepieciešama, jo datu glabāšanai, kas attēloti kā šūnu režģis, ir nepieciešams liels atmiņas apjoms. Vienkāršs 500x400 pikseļu attēls satur 200 000 pikseļu, un, ja katram pikselim ir nepieciešami trīs baiti, nepieciešamās atmiņas apjoms jau pārsniedz pusmegabaitu.

Saspiešanas tēma ir plaša un sarežģīta, taču lielākā daļa saspiešanas algoritmu ir balstīti uz attēla dublēšanas samazināšanu, lai samazinātu tā izmēru. (Piemēram, būs nepieciešams mazāk vietas atmiņā, lai norādītu, ka katrs attēla pikselis ir zaļš, nekā katram pikselim atsevišķi norādītu zaļo vērtību.) Diemžēl saspiešanas algoritmi nepaļaujas uz šo īpašību izmantošanu, jo tiem ir jāizlemj, vai sarežģītas problēmas, ka šo problēmu risināšanas metodes, kas ieviestas saspiešanas algoritmā, ko izmanto attēlu ģenerēšanai GIF formātā, ir pat patentētas.

Bibliotēkas instalēšana

Atklāti sakot, uzdevums instalēt gd bibliotēku un panākt, lai tā veiksmīgi darbotos kopā ar PHP sistēmu, ir diezgan sarežģīts. Tas nav saistīts ar kādiem PHP vai gd programmatūras trūkumiem, bet gan pilnībā konfigurācijas problēmu dēļ; jo īpaši jums ir jāsaprot, kur vajadzētu būt un kur faktiski atrodas gd bibliotēkām, un jānodrošina, lai visu izpildāmo failu kompilācijas un saistīšanas darbības tiktu pabeigtas pareizi. Tāpēc labākā iespējamā situācija ir tāda, ka lietotājs atklāj, ka gd bibliotēka jau ir instalēta un PHP sistēmā jau ir iespējots gd atbalsts (vai nu ar tīmekļa mitināšanas uzņēmuma palīdzību, vai tāpēc, ka tas ir iekļauts instalētajā PHP sistēmā).

Tāpēc gd bibliotēkas instalēšana jāsāk no nulles soļa – pārbaudot, vai šī bibliotēka jau ir instalēta. Vispirms skripta failā ievadiet tālāk norādīto kodu un skatiet tā palaišanas rezultātus pārlūkprogrammā neatkarīgi no tā, vai jūsu skriptus palaiž jūsu tīmekļa mitināšanas uzņēmums vai tos pilnībā izpilda jūsu instalācija:

Pēc šīs lapas parādīšanas ekrānā vienkārši meklējiet teksta virkni "gd" pārlūkprogrammas logā. Tam vajadzētu atklāt apakšsadaļu, kurā aprakstīts, cik lielā mērā jūsu PHP instalācija ļauj atbalstīt gd bibliotēku. Ja plānojat sagatavot tikai noteikta veida attēlus (piemēram, PNG) un funkcijas phpinfo() rezultāti liecina, ka ir iespējots šāda veida attēlu atbalsts, varat sākt uzreiz. Un, ja gd versijas informācijā ir ietverts vārds "komplektēts", tad tiek izmantota PHP komplektā iekļautā gd bibliotēka.

Ja mēģinājums atrast pieminēšanu par gd bibliotēku beidzas neveiksmīgi un jūs pats instalējat PHP, varat instalēt un konfigurēt gd bibliotēkas konfigurāciju. (No otras puses, ja jūsu PHP instalēšanu veic jūsu mitināšanas uzņēmums, jūsu vienīgā iespēja ir lūgt šim uzņēmumam nodrošināt atbalstu gd bibliotēkai vai izmantot citu tīmekļa mitināšanas uzņēmumu.)

Izmantojot PHP komplektācijā iekļauto gd bibliotēku, tiek novērstas daudzas problēmas, kas saistītas ar gd instalēšanu, bet ne visas. Fakts ir tāds, ka, izmantojot izplatīšanas komplektā iekļauto versiju, varat iegūt gd bibliotēku, bet ne vienmēr visas bibliotēkas, kas nepieciešamas, lai gd darbotos. Pati gd bibliotēka ir atkarīga no vairākām citām bibliotēkām: libpng (lai apstrādātu PNG attēlus), zlib (saspiešanai) un jpeg-6b vai jaunāka versija (ja nepieciešams, lai apstrādātu JPEG attēlus). Šīs bibliotēkas jau ir pieejamas daudzās Linux instalācijās, un tādā gadījumā var pietikt, ja opcijās iekļauj nepieciešamo ar opciju (piemēram, --with-zlib), nenorādot instalācijas direktoriju. Ja pats veicat PHP konfigurāciju, varat vienkārši pievienot opciju --with-gd, lai nodrošinātu, ka iekļautā gd versija ir iekļauta izpildāmajā failā. Un, ja vēlaties norādīt uz citu versiju, izmantojiet opciju --with-gd=path.

Ja atklājat, ka trūkst vienas vai vairāku obligāto bibliotēku, tas nozīmē, ka šīs bibliotēkas būs jāveido atsevišķi. Lai iegūtu informāciju par to, kur atrast pašreizējās versijas, varat sākt, pārskatot dokumentāciju, kas atrodas vietnē www.libgd.org.

Pamatprincipi darbam ar gd bibliotēku

Kad attēls tiek izveidots vai apstrādāts, izmantojot gd rīku komplektu, attēls tiek attēlots īpašā gd formātā, kam nav atbilstības nevienam parastajam attēla veidam. Teorētiski ir iespējams eksportēt attēlus šajā gd formātā, taču šāda darbība tiek izmantota reti, jo iegūtais attēls nav saspiests un to nevar parādīt pārlūkprogrammā vai vienkāršā grafikas programmā.

Attēlu, kas apstrādāts, izmantojot gd rīku komplektu, raksturo informācija par visu pikseļu platumu, augstumu un krāsu, kuru skaits ir vienāds ar platuma un augstuma reizinājumu. Parasti programma sāk mijiedarbību ar gd bibliotēku, izveidojot jaunu tukšu attēlu (uz kura zīmēt un zīmēt), vai importējot attēlu no faila. Parasti tiek veiktas šādas darbības: pirmkārt, krāsu sadalījums attēlā, otrkārt, attēla zīmēšana un krāsošana vai manipulācija ar kādu citu darbību, treškārt, attēla pārvēršana vispārpieņemtā formātā (piemēram, PNG vai JPEG ) un pārsūtiet to uz galamērķi.

Krāsu attēlojums

Ir divi veidi, kā attēlot krāsas gd attēlos: uz paletes balstīts attēlojums, kas ir ierobežots līdz 256 krāsām, un patieso krāsu attēlojums, kas ļauj norādīt patvaļīgu skaitu dažādu RBG krāsu numuru. Gd 1.x versijā vienīgā iespēja bija izmantot uz paletes balstītas krāsas, bet gd 2.x un šīs bibliotēkas versijā, kas iekļauta PHP komplektācijā, ir iespējams izveidot gan uz paletes balstītus attēlus, gan attēlus reālistiskās krāsās. Viena lieta, kas jāpatur prātā, ir tāda, ka jebkuram konkrētajam gd attēlam ir jābūt vai nu uz paletes bāzes, vai ar patiesām krāsām (RGB); tas nozīmē, ka, pamatojoties uz paleti, attēlos nav iespējams ieviest reālistiskas krāsas.

Lai iegūtu oriģinālo tukšo attēlu, pamatojoties uz paleti, jums ir jāizsauc funkcija ImageCreate() un, lai attēlu iegūtu patiesās krāsās, izmantojiet funkciju ImageCreateTrueColor().

Attēli, kuru pamatā ir palete

Krāsas tiek norādītas Red-Green-Blue (RGB) formātā, izmantojot trīs skaitļus no 0 līdz 255. Piemēram, ar cipariem (255, 0, 0) norādītā krāsa ir spilgti sarkana, krāsa ( 0, 255, 0) - zaļa, krāsa (0, 0, 255) - zila, krāsa (0, 0, 0) - melna, krāsa (255, 255, 255) - balta un krāsaina (127, 127, 127) - pelēka. Izveidojot arvien jaunas krāsas, jūs varat patvaļīgi izvēlēties trīs krāsu komponentu vērtības.

Jebkurš zīmējums uz attēla ir jāizdara ar noteiktu krāsu, un krāsas ir jāsadala attēlā pirms to izmantošanas. Turklāt pirmā krāsa, kas izplatīta attēlā, automātiski kļūst par fona krāsu. Tāpēc nekādā gadījumā nevajadzētu pieņemt, ka varat iztikt bez krāsu norādīšanas, un parasti krāsu sadales darbība ir pirmā darbība pēc jauna tukša attēla izveides.

Krāsas attēlos, kuru pamatā ir palete, tiek izveidotas, izmantojot funkciju imagecolorallocate(), kas kā parametrus ņem attēlu (izveidotu iepriekš) un trīs veselus skaitļus, kas norāda sarkanā, zaļā un zilā proporciju. Atgriešanas vērtība ir vesels skaitlis, kas norāda jaunās krāsas indeksu attēla iekšējā paletē. Šī atgriešanas vērtība ir jāpiešķir mainīgajam, jo ​​norādītā indeksa vērtība ir nepieciešama, lai veiktu visas turpmākās darbības, izmantojot šo krāsu.

Uz paletes balstītiem attēliem var būt maksimālais krāsu skaits 256. (Lasītāju var interesēt vai neinteresēt, uz ko šādi attēli patiesībā ir balstīti, taču katrs uz paletes balstīta attēla pikselis patiesībā ir viens baits, kurā tiek saglabāts rādītājs. vienu elementu 256 krāsu paletē.)

Ņemiet vērā, ka rādītājam, kas tiek atgriezts, sadalot kādu no attēla krāsām, ir nozīme tikai šim attēlam. Piemēram, ja PHP skripts piešķir $black krāsai, kas ir izplatīta vienā attēlā, tad nav jēgas izmantot šo mainīgo kā krāsas ievadi zīmēšanas komandai, kas tiek izsaukta cita attēla apstrādei.

Attēli ar reālistiskām krāsām

gd 2.0 un jaunākas versijas nodrošina arī iespēju izveidot attēlus, kas nav balstīti uz paletes, kuros katrs pikselis saglabā patvaļīgu RGB krāsu numuru. Šajā tā sauktajā patieso krāsu formātā iespējamo krāsu skaits ir ārkārtīgi liels. Šī funkcija ne tikai neierobežoti paplašina mākslinieciskās izteiksmes jomu, bet arī ļauj patiesi reproducēt PNG un JPEG attēlus ar patiesām krāsām, kas ielādētas atmiņā, izmantojot gd rīku komplektu.

Izņemot to, ka sākotnējā attēla izveidei tiek izmantota cita funkcija un nav nekādu ierobežojumu dažādu krāsu izvēlei, darbības principi ar īstu krāsu attēliem ir līdzīgi kā uz paletes balstītiem attēliem.

Jo īpaši joprojām varat izsaukt ImageColorAllocate(), lai izveidotu jaunas krāsas un piešķirtu mainīgajam atgriešanas vērtību vēlākai lietošanai zīmēšanas komandās. Vienīgā atšķirība ir tā, ka atgriešanas vērtība ir RGB krāsas numurs, nevis elementa indekss paletē. Turklāt attēlos ar patiesām krāsām nav fona krāsas koncepcijas, kas izveidota kā funkcijas ImageColorAllocate() blakusefekts; Inicializācijas rezultātā visiem pikseļiem tiek piešķirts apzīmējums melns (0, 0, 0).

Caurspīdīgums

Gd 2.x versijas atbalsta caurspīdīguma koncepciju. Tas izmanto alfa kanālu (papildus sarkanajām, zaļajām un zilajām vērtībām), lai norādītu, cik caurspīdīga ir krāsa. Tas ļauj, piemēram, vienu formu uzlikt citai, lai pirmā forma paliktu daļēji redzama, nevis pilnībā pārklāta ar otro.

PHP daudzām funkcijām darbam ar attēliem ir analogs, kura nosaukumā ir vārds "alfa", kas norāda, ka šajās funkcijās krāsu attēlo četras vērtības (R, G, B, A). Piemēram, funkcijai imageColorAllocate() ir trīs parametri, un, izsaucot funkciju ImageColorAllocateAlpha(), ir jānorāda ceturtais parametrs ar vērtību no 0 līdz 127. Nulles vērtība norāda, ka krāsa ir pilnīgi necaurspīdīga, un vērtība no 127 norāda, ka krāsa ir pilnīgi necaurspīdīga

Koordinātas un zīmēšanas komandas

Pēc attēla izveides, izmantojot gd rīku komplektu, tiek netieši izveidota koordinātu sistēma, kas ļauj tajā norādīt zīmēšanas komandas. Ierobežojošās koordinātu vērtības šajā sistēmā nosaka norādītie attēla platuma un augstuma parametri.

Koordinātu izcelsme šajā sistēmā, kas atbilst koordinātām (0, 0), atrodas attēla augšējā kreisajā stūrī. Pozitīvais virziens X vērtībām ir no kreisās uz labo pusi, bet Y vērtībām tas ir no augšas uz leju. (Datorgrafikas koordinātu sistēmās šī izcelsmes vieta ir izplatīta, bet tie, kas ir studējuši analītisko ģeometriju, šķiet, ir pieraduši, ka izcelsme atrodas diagrammas apakšējā kreisajā stūrī.)

Zīmēšanas komandu skaits ir ļoti liels. Šīs komandas ietver, bet ne tikai, komandas līniju segmentu, taisnstūru un loku zīmēšanai, kā arī komandas konkrētu pikseļu vērtību iestatīšanai. Bet paturiet prātā, ka visu šo zīmēšanas un zīmēšanas komandu gala rezultāts ir pikseļu vērtību iestatīšana. Pēc komandu izpildes, kas maina pikseļu vērtības, atmiņā nepaliek nekādas pēdas (izņemot pašas mainītās vērtības), tāpēc nav iespējams ignorēt zīmēšanas un zīmēšanas komandas vai uzrādīt dažādu komandu rezultātus atsevišķi.

Nekas neliedz zīmēšanas komandas, kas sniedzas ārpus norādītā attēla, taču šādai zīmēšanai nav redzama efekta. Piemēram, taisnstūris attēlā nebūs redzams, ja visas koordinātu vērtības ir negatīvas.

Formāta konvertēšana

Visas zīmēšanas un attēlu apstrādes darbības tiek veiktas ar attēlu, kas attēlots iekšējā gd formātā. Un pēc šo darbību pabeigšanas skripts var izsaukt vienu no konvertēšanas un izvades komandām (imagepng, imagetjpeg utt.), lai pārvērstu šo attēlu vajadzīgajā grafiskajā formātā un izvadītu to lietotāja pārlūkprogrammas logā (vai failā).

Resursu atbrīvošana

Kad pabeigtā gd attēla konvertēšanas rezultāts ir pārsūtīts lietotājam, mēs varam uzskatīt, ka darbs ar iekšējo versiju ir pabeigts. Tas nozīmē, ka šī versija ir jāiznīcina. Pareizais veids, kā to izdarīt, ir izsaukt imagedestroy() ar attēlu kā parametru.

gd bibliotēkas funkcijas

Šajā rakstā mēs atsevišķi neuzskaitīsim un neaprakstīsim visas PHP tulka gd saskarnē sniegtās funkcijas. Lai iepazītos ar šo informāciju, iesakām izmantot php.net rokasgrāmatas sadaļu “Attēlu apstrāde un ģenerēšana”. Lielākā daļa gd funkciju ietilpst kādā no kategorijām, kas parādītas zemāk esošajā tabulā. Ņemiet vērā, ka šajā tabulā norādītie funkciju nosaukumi ir rakstīti ar lielajiem burtiem, lai katra vārda pirmais burts būtu vieglāk lasāms, taču šis nosacījums ne vienmēr tiek ievērots koda piemēros, jo PHP funkciju nosaukumi nav reģistrjutīgi:

Gd funkciju klasifikācija Ierakstiet Piezīmes piemērs
Attēlu veidošanas funkcijas ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Atgriezt jaunu gd attēlu. Funkcija ImageCreate() izmanto kā parametrus attēla platumu un augstumu, bet citu funkciju parametri ir faila ceļš, URL vai virkne, kas satur iepriekš izveidotu attēlu, kas jāielādē un jāpārvērš gd formātā.
Funkcijas, kas veic krāsu sadales darbības ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() Funkcija ImageColorAllocate() izmanto attēla rokturi un vajadzīgās sarkanās, zaļās un zilās vērtības kā parametrus, un pēc tam atgriež krāsas numuru vēlākai izmantošanai zīmēšanas un zīmēšanas darbībās. Funkcija ImageColorAllocateAlpha pieņem papildu parametru - caurspīdīguma koeficientu (0-127)
Funkcijas, kas veic krāsu saskaņošanas darbības ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Atgrieziet atbilstošās krāsas indeksu paletētajā attēlā. Funkcijas, kuru nosaukumā ir vārds "Vistuvākais", atgriež krāsu, kas vislabāk atbilst (atbilstības precizitāte tiek mērīta kā attālums starp punktiem RGB vērtību telpā); funkcijas ar apzīmējumu "Precīzs" atgriež krāsas numuru tikai tad, ja tas ir identisks meklētajam, pretējā gadījumā tās atgriež vērtību -1, funkcijas ar nosaukumu "Alfa" darbojas ar krāsām, kuras nosaka, izmantojot četras vērtības (ar caurspīdīgas krāsas)
Līniju zīmēšanas funkcijas ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageElipse(), ImageArc() Tos izmanto, lai zīmētu noteiktas formas taisnus segmentus vai līknes. Parasti katras šīs funkcijas pirmais parametrs ir attēls, pēdējais parametrs ir krāsa, bet starpparametri ir X un Y koordinātas.
Līniju zīmēšanas pildspalvas iestatījumi ImageSetStyle(), ImageSetBezums() Mainiet iestatījumus, kas ietekmē līniju raksturlielumus, ko rada turpmākās līniju zīmēšanas komandas (dažas no šīm funkcijām ir piemērojamas tikai gd 2.0.1 vai jaunākām versijām)
Zīmēšanas un aizpildīšanas funkcijas ImageFilledRectangle(), ImageFilledElipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Parasti tās ir līdzīgas attiecīgajām līniju zīmēšanas funkcijām, taču tās nodrošina ne tikai laukumu kontūru zīmēšanu, bet arī izveidoto laukumu aizpildīšanu ar krāsu. Īpašā funkcija ImageFill() veic aizpildīšanas darbību, izmantojot noteiktu aizpildījuma krāsu. Aizpildīšana tiek veikta visos virzienos, sākot no norādītajām XY koordinātām (dažām no šīm funkcijām ir nepieciešama gd 2.0.1 vai jaunāka versija)
Funkcijas darbam ar tekstu ImageString(), ImageLoadFont() Funkcija ImageString kā parametrus izmanto attēla rokturi, fonta numuru, X un Y koordinātas, teksta virkni un krāsu. Ja fonta numurs ir no 1 līdz 5, tad, lai parādītu līniju šajā krāsā, tiek izmantots viens no pieciem iebūvētajiem fontiem. No otras puses, fonta numurs, kas lielāks par 5, norāda specializēta fonta ielādes rezultātu, izmantojot funkciju ImageLoadFont()
Eksporta funkcijas ImagePng(), ImageJpeg() Konvertējiet iekšējo gd attēlu par atbilstoša formāta attēlu un pēc tam nosūtiet šo attēlu uz izvades straumi. Ja ir norādīts tikai viens parametrs (attēla rokturis), attēls tiek atbalsots lietotājam, un, ja tiek izmantots papildu parametrs, kas ir faila ceļš, izvades straumes mērķis kļūst par failu
Attēlu iznīcināšanas funkcija ImageDestroy() Kā parametru izmanto attēla turi un atbrīvo visus ar attēlu saistītos resursus
HTTP attēlu atbalsts

Lai attēls tiktu pareizi parādīts lietotāja pārlūkprogrammā, ir jānorāda, no kurienes attēlam ir jānāk un kāds ir tā formāts. Tāpēc diemžēl nav iespējams ģenerētajā HTML failā vienkārši ieviest, piemēram, funkcijas imageToPng() izsaukumu un tādējādi atrisināt attēla parādīšanas problēmu. Būtībā attēla izvades kods ir jāapvieno ar HTML kodu, kas ģenerēts PHP skriptā, un, lai to izdarītu, varat izmantot vienu no trim tālāk aprakstītajām opcijām.

Pilnas lapas attēlu izveide

Visu ģenerēto lapu var formatēt kā attēlu. Šādā gadījumā pirms attēla datiem ir jānosūta HTTP galvene, tādējādi paziņojot, ka tālākais ir noteikta veida attēls. Piemēram, skripta beigās var būt norādītas šādas rindas:

// ... kods, kas izveido attēlu un piešķir to // mainīgajam $image header("Content-type: image/png"); // Parādīt nosaukumu pārlūkprogrammā imagepng($image); // Nodod paša attēla datus, pārveidotus PNG formātā imagedestroy($image); // Atbrīvojiet resursus

Šīs pieejas priekšrocība ir tāda, ka jebkuru informāciju, tostarp POST parametrus, var izmantot, lai sniegtu norādījumus par nākamā attēla sastāvu. Negatīvā puse ir tāda, ka iegūtajā lapā nevar būt parastā HTML koda. Patiesībā jums pat ir jāuzmanās, lai skriptos nenosūtītu teksta izvadi pirms nosaukuma un attēla, jo tas ir līdzvērtīgs satura priekšlaicīgai nosūtīšanai. Šādā gadījumā tiek parādīts kļūdas ziņojums "Galvenes jau ir nosūtītas...".

Failos saglabāto attēlu iegulšana

Pirmkārt, ņemiet vērā, ka HTML atbalsta deskriptoru , kas ļauj iegult attēlu, norādot attēla faila ceļu vai URL, kā parādīts šajā piemērā:

Šis dizains attiecas uz statiskiem attēlu failiem, taču nav iemesla, kāpēc tas nevarētu iespējot jaunizveidota attēla iegulšanu. Tāpēc jūs varat sagatavot skriptu, kurā vispirms tiek izveidots attēls, pēc tam attēla dati tiek ierakstīti vietējā failā un pēc tam tiek ģenerēts HTML kods ar atbilstošo deskriptoru. , norādot uz jaunizveidoto failu.

Vienīgie šīs pieejas trūkumi ir tādi, ka, pirmkārt, lapas izveides procesā jāiekļauj failu rakstīšana, kas var būt laikietilpīga, un, otrkārt, jums ir jānosaka, ko darīt ar failiem, kad esat pabeidzis to izmantošanu.

Bet noteiktā situācijā šī pieeja ir ideāla. Tas ir par attēlu izveidi un saglabāšanu kešatmiņā, kas atspoguļo ierobežotu izvēli. Šajā gadījumā ir īpašs veids, kā saistīt konkrētu situāciju ar attēla faila nosaukumu. Ja rodas dažas no šīm situācijām, kurās nepieciešams izvadīt attēlu, tiek pārbaudīts, vai atbilstošs fails jau nepastāv. Ja atbilde ir pozitīva, tiek vienkārši lietota saite uz šo failu, kas formatēta kā deskriptors , un, ja atbilde ir nē, tiek izveidots attēls, ierakstīts failā un pēc tam atkal tiek lietota saite uz šo attēlu. Galu galā jaunu failu izveide vienkārši nebūs nepieciešama.

Skriptos ģenerētu attēlu iegulšana

Visbeidzot, nav iemesla, kāpēc jūs nevarējāt nodrošināt atsevišķu attēla skriptu un pēc tam iegult iegūto attēlu dinamiskā lapā, ko ģenerē cits skripts, norādot deskriptorā. Šī skripta URL. Vienīgā grūtība ir izvēlēties, kā pārsūtīt nepieciešamos datus uz atkarīgo lapu. Piemēram, rokturis, kas norāda iegulto attēlu, var izskatīties šādi:

Šajā gadījumā ballpage.php skripts atgriež PNG attēlus ar krāsainām bumbiņām, kas atrodas dažādās attēla vietās.

Taču šīs pieejas izmantošana var radīt problēmas, jo tīmekļa serveri un pārlūkprogrammas dažkārt pārbauda apstrādāto failu sufiksus un, saņemot pārbaudes rezultātus, reaģē uz tiem atšķirīgi. Piemēram, ballpage renderēšanas skriptam var būt nepieciešams piešķirt .php paplašinājumu, lai Apache serveris varētu noteikt, ka servera kods ir jāinterpretē kā PHP kods (lai gan nepieciešamo apstrādes režīmu var norādīt arī konfigurācijas failos).

Taču ir arī nestandarta pārlūkprogrammu versijas, kas neņem vērā iespēju, ka fails ar paplašinājumu .php rada attēlu, lai gan nokārtotā galvene norāda, ka seko attēls. Tāpēc, izmantojot šo metodi, ir jāpārbauda skripti dažādās pārlūkprogrammās un jāpārliecinās, ka paredzētais lietotāju loks saņems lapas tādā formā, kādā esat iecerējis.

Tālāk ir sniegti gd bibliotēkas izmantošanas piemēri attēlu izveidei.

Gd bibliotēkas izmantošanas piemērs: vienkāršu formu izveide

Nākamajā piemērā mēs parādīsim, kā izmantot gd bibliotēku, lai ģenerētu zīmējumu, kurā ir vienkāršas ģeometriskas formas:

Nomainiet iestatījumus ar saviem un saglabājiet šo failu ar nosaukumu connect-to-database.php mapē fcdemo.

Ievietosim nejaušus datus

Ja tas būtu īsts projekts, lietotāju tabula laika gaitā pieaugtu, bet demonstrācijas labad mums ir jāievieto daži dati. Uzrakstīsim nelielu skriptu, kas tabulā ievietos nejaušus datus. Neuztraucieties, ja nesaprotat tālāk norādīto kodu — šai apmācībai tas nav svarīgi.

Saglabājiet šo failu ar nosaukumu generate-random-data.php vienā mapē.

Vispirms iekļaujam datu bāzes savienojuma failu. Pēc tam mēs iestatām laika posmu, no kura nejauši tiks izvēlēts lietotāja reģistrācijas laiks. Varat mainīt ievietojamo rindu skaitu. Lai to izdarītu, jāpielāgo mainīgais $RecordsToInsert.

Pēc tam palaižam skriptu ģenerēto ierakstu ievietošanai datu bāzē. Lai sāktu šo procesu, dodieties uz šo adresi - http://localhost/fcdemo/generate-random-data.php.

Galu galā jums vajadzētu redzēt ziņojumu: "Ievietoti ($RecordsToInsert) ieraksti"

2. darbība. Sagatavojiet vietnes skeletu

Mums ir jāizveido ļoti vienkārša lapa, lai parādītu mūsu diagrammu. Kaut kas tamlīdzīgs:

FusionCharts v3.2 — LinkedCharts PHP demonstrācija