Casa / Lavora su Internet / Esempi di grafica in php. Crea grafici interattivi in ​​PHP e FusionCharts. Miglioramento del codice PHP

Esempi di grafica in php. Crea grafici interattivi in ​​PHP e FusionCharts. Miglioramento del codice PHP


Sai, vecchio, non vedevo niente del genere da molto tempo. Sembrava persino che l'anime dovesse essere legato. La vecchiaia si insinuò impercettibilmente e tutti questi ragazzi con spade da tiro e ragazze dai capelli vivaci si fusero in una massa appiccicosa continua. Sembrava che tutti i personaggi parlassero solo stupidamente, solo ad alta voce e solo dell'eterno. E tutto ribolle di follia giovanile mecha-fantasy, wow!.. E quanto sono felice di aver trovato "Teatro ...". Che cosa sembra? Su, come siamo abituati a vederla, non troppo. Cioè, disegnare qualcosa - sì, certo. E in termini di umore, "tira" di più su "", probabilmente. O ai vecchi cortometraggi georgiani (ve li ricordate?), che sono “più simili alla vita”. Tutti i tipi di persone diverse, giovani e al contrario, parlano, vivono, si conoscono, lavorano... Certo, qualche momento chiave è preso per la trama, non il più di routine. Ma quanto è bello che questo momento chiave non sia il primo bacio e non l'acquisizione di potere mistico, ma, ad esempio, l'incontro con i compagni di classe molti anni dopo, o il licenziamento da un lavoro ben pagato, o l'incontro con tua suocera. “C'è vita dopo i 30 anni?” Sì? Mi piace pensare che ci sia. E mi piace che anche Rumiko Takahashi la pensi così.

Non urlare, micio, non ci metterò molto. Sto già controllando. E in generale, cosa significa "il mio computer" ?! E allora dov'è il mio?.. Dopotutto, a volte ho anche bisogno di guardare uno o due anime. Guarda, ha riempito tutto "" e "" ... Posso chiedere, una volta nella vita con calma ?! Cosa sto guardando? Rumiko Takahashi Theatre, ci sono delle scatole laggiù... Perché diavolo, coniglietto? In primo luogo, non è spazzatura, è solo il 2003, e in secondo luogo, "" ti piace ", "" leggi con piacere - il mangaka è lo stesso, ma non berrai l'abilità, fringuello. Takahashi-san sa disegnare e incuriosire molto bene... Perché allora la serie è così breve? E questa non è una serie, questa è una serie di cortometraggi - con trame separate, con personaggi diversi. Divertente o in lacrime? E quelli, e quelli - vedi, è scritto: "dramma", "commedia", "vita quotidiana" ... Non ti piace la "vita quotidiana"? Non parlare così, topolino, altrimenti non ti amerà neanche lei. Una buona routine quotidiana è una grande cosa! Lascia che ti mostri come hanno nascosto un pinguino ai vicini nel Krusciov giapponese. Seriyushka per mamma, come durante l'infanzia, e andrò a cucinare la cena, ok? ..

Ho appena pianto, dannazione! Non pensavo che sarei stato in grado di entrare in cose del genere! Ed è divertente, perdio, è divertente, soprattutto su una donna anziana che è uscita dal coma e sta cercando il motivo per cui è stata riportata in vita. E questa sua storia d'amore preistorica attraverso occhi diversi: come racconta se stessa, e come - il suo soggetto; quello che viene chiamato "senti la differenza!". E il lieto fine sulle gambe della vecchia che si spezzano, ho appena rosicchiato il cuscino dalla tenerezza!.. E l'episodio sul palazzo delle nozze! Amo così tanto le vere storie romantiche, non quando tutto è patinato dallo smalto glamour, ma quando puoi davvero simpatizzare con una persona vivente. E per quanto riguarda l'invecchiamento di marito e moglie, questi rimpianti sono così ben trasmessi, questi tentativi di catturare la giovinezza con la coda sfuggente e già rognosa ... e tutto finisce così saggiamente e bene. Ho anche pensato: forse anche i miei antenati non sono del tutto indifferenti l'uno all'altro, ma si sono semplicemente dimenticati come dimostrarlo con l'età ...

Sto guardando la serie di notte. Lentamente. Sono molto diversi, non vuoi confonderli. È come se stessi visitando posti diversi. E l'umore è completamente diverso e le impressioni. NO. Probabilmente non ti piacerà. Perché niente di speciale. E surreale Stesso. E anche lo "psicologismo" - "infanzia difficile, mancanza di vitamine, avrebbe comprato un gameboy in tempo, bastardi, vedi, non sarebbe diventato un killer maniaco" - no. E niente di particolarmente istruttivo. Queste cose fondamentalmente non insegnano nulla. Cosa può insegnare la vita di qualcun altro? Solo perché c'è anche lei. Puoi provare a fare i conti con questo ... Senza pathos e note alte. Non è nemmeno un dramma, sai? Come disse Carlson: "sciocchezze, la questione della vita!". Tutte queste sono le cose della vita. Spontaneo. Siamo così spesso accusati di simpatia per assassini professionisti e ogni sorta di altre vedove che simpatizzare con un impiegato o una casalinga, questa è una specie di cattiva educazione ... sì, non ti leggo la morale, toglila . Hai chiesto - ho risposto. Dai, parlami dei tuoi nuovi prodotti. Poi lo prenderò quando il "Teatro..." sarà finito. È come il vino, non si può inghiottire. Le sfumature non raggiungeranno o il retrogusto sarà imbrattato. Sarebbe imbarazzante...

Per determinare l'ambito degli strumenti di creazione grafica negli scenari web, considera le seguenti serie opzioni utilizzo della grafica:

  • Le immagini statiche create da te o prese in prestito da qualche parte possono essere incorporate in una pagina HTML.
  • È possibile utilizzare immagini generate in modo programmatico (HTML + CSS).
  • È possibile utilizzare la libreria gd per pre-creare immagini grafiche statiche per tutte le possibili situazioni che si verificano durante l'esecuzione dello script, salvarle in file e visualizzarle per condizione.

Non considereremo l'opzione di implementare la grafica utilizzando immagini statiche a causa della sua semplicità, quindi considereremo prima un'opzione semplice (grafica HTML + CSS), quindi considereremo l'utilizzo della libreria gd in PHP.

Grafica HTML + CSS

I visitatori del sito Web hanno familiarità con i grafici a barre orizzontali con i lati colorati, che sono particolarmente comuni per illustrare i risultati dei sondaggi. A prima vista, si ha l'impressione che una specie di sussidi grafici, ma in realtà è sufficiente utilizzare alcuni semplici script:

" . $ex->getMessage() . ""; } } ?> Lavorare con la grafica in PHP, HTML, CSS

Modulo d'ordine

Frutta
Verdure
Hai ordinato:arance:

Mele:

Banane:

Pomodori:

Cetrioli:

Patata:

EOT; ?>

Questo esempio non dimostra alcuna nuova funzionalità di PHP, ma mostra semplicemente un modo semplice per creare grafici utilizzando HTML e CSS (in questo caso, grafici a barre):

libreria gd

Gli strumenti grafici descritti nella sezione precedente hanno quasi esaurito le capacità del codice HTML standard (anche se vale la pena notare che non abbiamo trattato il potente generatore grafico HTML5 Canvas). Passiamo ora alla descrizione dei metodi per creare grafica veramente arbitraria utilizzando la libreria gd.

Descrizione generale della libreria gd

In generale, il set utensili gd è una libreria di codice C per creare e manipolare immagini. Questa libreria è stata originariamente sviluppata e messa a disposizione del pubblico dalle persone talentuose e generose di Boutell.com.

La stessa libreria gd non lo è programma di grafica o un programma di disegno e non è un'applicazione autonoma o GUI utente. Invece, la libreria gd fornisce funzioni che possono essere chiamate da qualsiasi programma per eseguire la manipolazione dell'immagine desiderata. Ciò significa che qualsiasi programma C che deve utilizzare il codice della libreria gd può essere collegato alla libreria gd. Questo è esattamente il problema risolto dagli sviluppatori del sistema PHP.

In effetti, è stato scritto un insieme di funzioni di interfaccia per questo scopo, che rende facile chiamare le routine gd da uno script PHP. Ma la libreria gd stessa non contiene alcun codice specifico per PHP e sono state sviluppate interfacce che consentono l'accesso alla libreria da diversi altri linguaggi e ambienti di programmazione, inclusi Perl, Pascal, Haskell e REXX.

La libreria gd ti consente di chiamare funzioni per creare immagini sorgente (inizialmente vuote, simili a un foglio di carta bianco), disegnare e disegnare all'interno di queste immagini sorgente usando vari modi e infine convertire l'immagine dal formato immagine interno di gd in un formato immagine standard, quindi inviarla alla destinazione finale (output in una finestra del browser o salvataggio in un file o database). E poiché tutte queste operazioni vengono eseguite sotto il controllo del programma e non eseguite manualmente, le immagini create possono diventare arbitrariamente complesse e dipendere da eventuali situazioni durante il corso del programma che è desiderabile renderle dipendenti.

Formati immagine

La libreria gd consente sostanzialmente di importare ed esportare immagini utilizzando un'ampia varietà di formati. I formati di immagine più popolari sono GIF, JPEG e PNG, anche se quest'ultimo di questi formati è utilizzato principalmente nei nostri esempi.

I formati GIF e PNG sono progettati per descrivere una griglia di elementi colorati corrispondenti a pixel, con alcune aggiunte. La prima aggiunta è che le celle possono contenere numeri di colore effettivi o indici in una tabella di numeri di colore. (La prima opzione crea immagini più espressive perché consente un numero qualsiasi di colori diversi, mentre l'ultima opzione crea immagini più compatte.)

La seconda aggiunta è la seguente. Naturalmente, la rappresentazione concettuale dei formati GIF e PNG è piuttosto semplice, ma in pratica la lettura, la scrittura e il trasferimento di immagini in questi formati avviene sempre in forma compressa. La compressione è necessaria perché è necessaria una grande quantità di memoria per memorizzare i dati rappresentati come una griglia di celle. Una semplice immagine di 500x400 pixel ha 200.000 pixel e se ogni pixel richiede tre byte, la quantità di memoria richiesta è già superiore a mezzo megabyte.

L'argomento della compressione è vasto e complesso, ma la maggior parte degli algoritmi di compressione si basa sulla riduzione della ridondanza dell'immagine per ridurre le dimensioni dell'immagine. (Ad esempio, occorrerebbe meno spazio di memoria per specificare che ogni pixel in un'immagine è verde piuttosto che specificare un valore verde per ogni pixel separatamente.) compiti così complessi che i metodi per risolvere questi problemi, implementati nell'algoritmo di compressione utilizzati per formare immagini in Formato GIF sono stati addirittura brevettati.

Installazione della libreria

Ad essere sinceri, il compito di installare la libreria gd e farla funzionare correttamente insieme a un sistema PHP è abbastanza difficile. Ciò non è dovuto a carenze. Software PHP o gd, ma è interamente determinato da problemi di configurazione; in particolare, è necessario capire dove dovrebbero e si trovano effettivamente le librerie gd e assicurarsi che i passaggi di compilazione e collegamento per tutti gli eseguibili siano eseguiti correttamente. Pertanto, la migliore situazione possibile è quando l'utente scopre che la libreria gd è già installata e il supporto gd è già abilitato nel sistema PHP (per gentile concessione della società di web hosting o perché la libreria è inclusa nel sistema PHP installato).

Pertanto, l'installazione della libreria gd deve iniziare dal punto zero, controllando se la libreria gd è già stata installata. Innanzitutto, inserisci il seguente codice nel tuo file di script e visualizza i risultati dell'esecuzione in un browser, indipendentemente dal fatto che i tuoi script siano supportati da una società di web hosting o interamente dalla tua installazione:

Dopo aver visualizzato questa pagina sullo schermo, è sufficiente cercare la stringa di testo "gd" nella finestra del browser. Ciò dovrebbe risultare in una sottosezione che descrive fino a che punto la tua installazione PHP è autorizzata a supportare la libreria gd. Se intendi eseguire il rendering solo di immagini di determinati tipi (ad esempio, formato PNG) ei risultati della funzione phpinfo() indicano che il supporto per questo tipo di immagine è consentito, puoi metterti subito al lavoro. E se i dati della versione gd includono la parola "bundled", viene utilizzata la libreria gd fornita con PHP.

Se il tentativo di trovare la menzione della libreria gd fallisce e stai eseguendo tu stesso l'installazione di PHP, puoi installare e configurare la libreria gd. (D'altra parte, se la tua società di hosting gestisce l'installazione di PHP, tutto ciò che devi fare è chiedere a tale società di fornire supporto per la libreria gd o utilizzare un'altra società di web hosting.)

L'utilizzo della libreria gd fornita con PHP elimina molti dei problemi associati all'installazione di gd, ma non tutti. Il fatto è che l'utilizzo della versione inclusa nel pacchetto di distribuzione stesso consente di ottenere la libreria gd, ma non necessariamente tutte le librerie necessarie per il funzionamento di gd. La stessa libreria gd dipende da molte altre librerie: libpng (per manipolare le immagini PNG), zlib (usata per la compressione) e jpeg-6b o successiva (per manipolare le immagini PNG). Immagini JPEG, se necessario). Le librerie specificate sono già presenti in molte installazioni Linux, nel qual caso potrebbe essere sufficiente includere l'opzione with richiesta (come --with-zlib) nei parametri senza specificare la directory di installazione. Se stai eseguendo tu stesso la configurazione PHP, aggiungere l'opzione --with-gd è sufficiente per garantire che la versione in bundle di gd sia inclusa nell'eseguibile. E se vuoi puntare a una versione diversa, usa invece l'opzione --with-gd=path.

Se ne trovi uno o più mancanti librerie richieste, ciò significa che queste librerie dovranno essere generate separatamente. Per informazioni su dove trovarlo versioni attuali, puoi iniziare guardando la documentazione disponibile su www.libgd.org.

Principi di base per lavorare con la libreria gd

Quando un'immagine viene creata o manipolata con il toolkit gd, l'immagine viene rappresentata in uno speciale formato gd che non corrisponde a nessun tipo di immagine convenzionale. È teoricamente possibile esportare immagini in questo formato gd, ma tale operazione è raramente utilizzata, poiché l'immagine risultante non è compressa e non può essere visualizzata in un browser o in un semplice programma di grafica.

Un'immagine elaborata utilizzando il toolkit gd è caratterizzata da informazioni sulla larghezza, l'altezza e il colore di tutti i pixel, il cui numero è uguale al prodotto della larghezza e dell'altezza. In genere, un programma inizia la sua interazione con la libreria gd creando una nuova immagine vuota (su cui disegnare e disegnare) o importando un'immagine da un file. I seguenti passaggi di solito si svolgono nei seguenti passaggi: in primo luogo, la distribuzione dei colori nell'immagine, in secondo luogo, il disegno e la pittura o la manipolazione dell'immagine utilizzando alcune altre operazioni, in terzo luogo, la conversione dell'immagine in un formato comune (ad esempio, PNG o JPEG ) e trasferiscilo nella destinazione.

Rappresentazione dei colori

Esistono due modi per rappresentare i colori nelle immagini gd: rappresentazione basata sulla tavolozza, che è limitata a 256 colori, e rappresentazione realistica dei colori, che consente di specificare importo arbitrario diversi numeri di colore RGB. In gd 1.x, l'unica opzione era usare i colori tavolozza, ma nella libreria gd 2.x e nella versione di quella libreria fornita con PHP, è supportata la possibilità di creare immagini a colori sia tavolozza che realistiche. Si noti che ogni particolare immagine gd deve essere basata su palette o true-to-color (RGB); questo significa che non c'è modo di iniettare colori realistici nelle immagini con tavolozza.

Per ottenere l'immagine vuota basata sulla tavolozza originale, è necessario chiamare la funzione ImmagineCrea() e il giorno in cui l'immagine viene ottenuta con colori realistici, viene utilizzata la funzione ImageCreateTrueColor().

Immagini basate sulla tavolozza

I colori sono specificati nel formato Rosso-Verde-Blu (RGB), utilizzando tre numeri da 0 a 255. Ad esempio, il colore specificato dai numeri (255, 0, 0) è rosso vivo, il colore ( 0, 255, 0) è verde, il colore (0, 0, 255) è blu, il colore (0, 0, 0) è nero, il colore (255, 255, 255) è bianco e il colore (127, 127, 127) è grigio. Creando sempre più nuovi colori, puoi scegliere arbitrariamente i valori delle tre componenti di colore.

Qualsiasi pittura su un'immagine deve essere eseguita con un colore specifico e i colori devono essere distribuiti nell'immagine prima di essere utilizzati. Inoltre, il primo colore distribuito nell'immagine diventa automaticamente il colore di sfondo. Quindi, in nessun caso puoi pensare di poter fare a meno di specificare i colori, e di solito l'operazione di distribuzione dei colori diventa la prima operazione dopo aver creato una nuova immagine vuota.

I colori nelle immagini con tavolozza vengono creati utilizzando la funzione imagecolorallocate(), che prende come parametri un'immagine (creata in precedenza) e tre numeri interi che specificano la percentuale di rosso, verde e blu. Il valore restituito è un numero intero che specifica l'indice del nuovo colore nella tavolozza interna dell'immagine. Questo valore restituito deve essere assegnato a una variabile perché il valore di indice specificato è necessario per tutte le operazioni future da eseguire utilizzando il colore specificato.

Le immagini basate su tavolozza possono avere un massimo di 256 colori (il lettore potrebbe essere interessato o meno a ciò su cui si basano tali immagini, ma ogni pixel in un'immagine basata su tavolozza è in realtà un singolo byte che memorizza l'indice di un elemento nella tavolozza di 256 colori.)

Si noti che l'indice restituito quando si distribuisce uno dei colori in un'immagine è significativo solo per quell'immagine. Ad esempio, se in uno script PHP alla variabile $black viene assegnato un colore distribuito in un'immagine, non ha senso utilizzare questa variabile come input di colore per un comando di disegno chiamato per elaborare un'altra immagine.

Immagini con colori realistici

La libreria gd 2.0 e successive fornisce anche la possibilità di creare immagini senza tavolozza in cui ogni pixel memorizza un numero arbitrario Colori RGB. In questo cosiddetto formato di colore realistico, il numero di colori possibili è estremamente elevato. Questa possibilità non solo espande all'infinito la portata dell'autoespressione artistica, ma consente anche di riprodursi in modo affidabile Immagini PNG e JPEG con colori realistici, caricati in memoria utilizzando il toolkit gd.

Ad eccezione del fatto che viene utilizzata una funzione diversa per creare l'immagine originale e non ci sono restrizioni sulla selezione di colori diversi, i principi per lavorare con immagini con colori realistici sono simili a quelli per le immagini basate sulla tavolozza.

In particolare, è ancora possibile chiamare la funzione ImageColorAllocate() per creare nuovi colori e impostare il valore restituito su una variabile da utilizzare successivamente nei comandi di disegno. L'unica differenza è che il valore restituito è il numero del colore RGB, non l'indice dell'elemento nella tavolozza. Inoltre, nelle immagini a colori realistiche, non esiste il concetto di colore di sfondo creato come effetto collaterale della funzione ImageColorAllocate(); come risultato dell'inizializzazione, a tutti i pixel viene assegnata una designazione nera (0, 0, 0).

Trasparenza

Le versioni di gd 2.x supportano il concetto di trasparenza. Questo utilizza un canale alfa (oltre ai valori rosso, verde e blu) che indica quanto è trasparente il colore. Ciò consente, ad esempio, di sovrapporre una forma all'altra in modo tale che la prima forma rimanga parzialmente visibile, anziché sovrapporsi completamente alla seconda.

In PHP, molte funzioni immagine hanno un equivalente che contiene la parola "alpha" nel nome, che indica che in queste funzioni il colore è rappresentato da quattro valori (R,G,B,A). Ad esempio, la funzione imageColorAllocate() accetta tre parametri e quando la funzione viene chiamata ImageColorAllocateAlpha()è necessario specificare un quarto parametro con un valore compreso tra 0 e 127. Un valore pari a zero indica che il colore è completamente opaco e un valore pari a 127 indica che il colore è completamente trasparente.

Coordinate e comandi di disegno

Dopo aver creato un'immagine utilizzando il toolkit gd, viene formato implicitamente un sistema di coordinate, che consente di impostare i comandi di disegno al suo interno. Vengono determinati i valori limite delle coordinate in questo sistema parametri dati larghezza e altezza dell'immagine.

L'origine delle coordinate in questo sistema, corrispondente alle coordinate (0, 0), si trova nell'angolo in alto a sinistra dell'immagine. La direzione positiva per i valori X è da sinistra a destra e per i valori Y è dall'alto verso il basso. (Nei sistemi di coordinate grafica computerizzata questa posizione dell'origine è comune, ma coloro che hanno studiato la geometria analitica sembrano essere abituati al fatto che l'origine è nell'angolo in basso a sinistra del diagramma.)

Il numero di comandi di disegno è molto grande. Questi comandi includono, ma non sono limitati a, comandi per disegnare segmenti di linea, rettangoli e archi, nonché comandi per l'impostazione di valori di pixel specifici. Ma tieni presente che il risultato finale di tutti questi comandi di disegno e disegno è l'assegnazione dei valori dei pixel. Dopo aver eseguito i comandi che modificano i valori dei pixel, non rimangono tracce in memoria (ad eccezione dei valori modificati stessi), quindi non è possibile annullare l'effetto del disegno e dei comandi di disegno o presentare separatamente i risultati dei diversi comandi.

Nulla impedisce di disegnare comandi che si estendono oltre l'immagine specificata, ma tale disegno non ha alcun effetto visibile. Ad esempio, l'immagine non mostrerà un rettangolo le cui coordinate sono tutte negative.

Conversione di formato

Tutte le operazioni di disegno e manipolazione delle immagini vengono eseguite sull'immagine rappresentata nel formato interno di gd. E dopo che queste operazioni sono state completate, uno dei comandi di conversione e output (imagepng, imagetjpeg, ecc.) può essere chiamato nello script per convertire questa immagine nel formato grafico richiesto e inviarla alla finestra del browser dell'utente (o a un file ).

Rilasciare risorse

Dopo che il risultato della trasformazione dell'immagine finita gd è stato trasferito all'utente, possiamo considerare che il lavoro con la versione interna è terminato. Significa che questa versione deve essere distrutto. Il modo giusto eseguire tale operazione consiste nel chiamare la funzione distruzione immagine() con un'immagine come parametro.

funzioni della libreria gd

Non enumereremo e descriveremo separatamente in questo articolo tutte le funzioni fornite nell'interfaccia gd dell'interprete PHP. Per familiarizzare con queste informazioni, si consiglia di utilizzare la sezione "Elaborazione e generazione di immagini" del manuale di php.net. La maggior parte delle funzioni gd rientra in una delle categorie mostrate nella tabella sottostante. Nota che i nomi delle funzioni elencati in questa tabella hanno la prima lettera di ogni parola in maiuscolo per leggibilità, ma questo non è sempre il caso negli esempi di codice perché i nomi Funzioni PHP senza distinzione tra maiuscole e minuscole:

Classificazione delle funzioni gd

Tipo Esempio Nota
Funzioni di creazione di immagini ImageCreate(), ImageCreateTruecolor(), ImageCreateFromGd(), ImageCreateFromJpeg() Restituisce una nuova immagine gd. La funzione ImageCreate() prende come parametri la larghezza e l'altezza dell'immagine, mentre i parametri di altre funzioni sono un percorso file, un URL o una stringa contenente un'immagine precedentemente creata da caricare e convertire in formato gd
Funzioni che eseguono operazioni di distribuzione del colore ImageColorAllocate(), ImageColorAllocateAlpha(), ImageColorDeallocate() La funzione ImageColorAllocate() accetta un handle di immagine e i valori di colore rosso, verde e blu richiesti come parametri, quindi restituisce un numero di colore da utilizzare successivamente nelle operazioni di disegno e disegno. La funzione ImageColorAllocateAlpha accetta un parametro aggiuntivo: coefficiente di trasparenza (0-127)
Funzioni che eseguono operazioni di corrispondenza dei colori ImageColorClosest(), ImageColorClosestAlpha(), ImageColorExact(), ImageColorExactAlpha() Restituisce l'indice del colore corrispondente nell'immagine con tavolozza. Le funzioni che contengono la parola "Closest" nei loro nomi restituiscono il colore corrispondente più vicino (l'accuratezza della corrispondenza viene misurata come distanza tra i punti nello spazio dei valori RGB); le funzioni etichettate "Exact" restituiscono il numero del colore solo se è identico a quello cercato, altrimenti restituiscono -1, le funzioni etichettate "Alpha" operano sui colori che vengono definiti utilizzando quattro valori (con colori trasparenti)
Funzioni di disegno al tratto ImageLine(), ImageDashedLine(), ImageRectangle(), ImagePolygon(), ImageEllipse(), ImageArc() Utilizzato per disegnare segmenti di linea o curve di una forma specificata. Di solito il primo parametro di ciascuna di queste funzioni è l'immagine, l'ultimo parametro è il colore ei parametri intermedi sono le coordinate X e Y.
Funzioni di impostazione della penna per disegnare linee ImageSetStyle(), ImageSetThickness() Modificare le impostazioni che influenzano le caratteristiche delle linee create dai successivi comandi di disegno della linea (alcune di queste funzioni si applicano solo a gd 2.0.1 o successivo)
Funzioni di disegno e riempimento ImageFilledRectangle(), ImageFilledEllipse(), ImageFilledPolygon(), ImageFilledArc(), ImageFill() Di norma, sono simili alle corrispondenti funzioni per disegnare linee, ma provvedono non solo a disegnare i contorni delle aree, ma anche a riempire di colore le aree create. La funzione speciale ImageFill() esegue un'operazione di riempimento con un riempimento, per cui il colore specificato riempie. Il riempimento viene eseguito in tutte le direzioni, a partire dal punto XY specificato (alcune di queste funzioni richiedono gd 2.0.1 o successivo)
Funzioni per lavorare con il testo ImageString(), ImageLoadFont() La funzione ImageString accetta come parametri un handle di immagine, un numero di font, coordinate x e y, una stringa di testo e un colore. Se il numero del carattere è compreso tra 1 e 5, viene utilizzato uno dei cinque caratteri incorporati per visualizzare la linea in quel colore. D'altra parte, un numero di carattere maggiore di 5 indica il risultato del caricamento di un carattere personalizzato utilizzando la funzione ImageLoadFont().
Funzioni di esportazione ImmaginePng(), ImmagineJpeg() Converti l'immagine interna di gd in un'immagine del formato appropriato, quindi invia questa immagine al flusso di output. Se viene fornito un solo parametro (descrittore dell'immagine), l'immagine viene riproposta all'utente e durante l'utilizzo parametro aggiuntivo, che è il percorso del file, la destinazione del flusso di output è il file
Funzione di distruzione dell'immagine ImageDestroy() Accetta un handle di immagine come parametro e rilascia tutte le risorse associate all'immagine

Supporto per i trasferimenti di immagini HTTP

Affinché un'immagine venga visualizzata correttamente nel browser dell'utente, è necessario specificare da dove deve provenire l'immagine e qual è il suo formato. Pertanto, sfortunatamente, non è possibile semplicemente iniettare, ad esempio, chiamando la funzione imageToPng() in file creato HTML e quindi risolvere il problema della visualizzazione di un'immagine. In sostanza, devi intercalare il codice di output dell'immagine con il codice HTML generato nello script PHP e puoi utilizzare una delle tre opzioni descritte di seguito per farlo.

Creazione di immagini a pagina intera

L'intera pagina generata può essere incorniciata come immagine. In questo caso, è necessario passare un'intestazione HTTP che precede i dati dell'immagine e quindi dichiarare che segue un'immagine di un tipo particolare. Ad esempio, le seguenti righe potrebbero essere fornite alla fine dello script:

// ... codice che crea un'immagine e assegna // alla variabile $image header("Content-type: image/png"); // Visualizza il titolo nel browser imagepng($image); // Passa i dati dell'immagine stessa convertita in PNG imagedestroy($image); // Risorse gratuite

Il vantaggio di questo approccio è che qualsiasi informazione, inclusi i parametri POST, può essere utilizzata per trasmettere istruzioni sulla composizione dell'immagine futura. E il suo svantaggio è che la pagina risultante non può contenere alcun normale codice HTML. In effetti, devi anche fare attenzione a non inviare alcun output di testo prima del titolo e dell'immagine negli script, poiché ciò equivale a inviare il contenuto prematuramente. In questo caso viene visualizzato il messaggio di errore "Intestazioni già inviate...".

Incorporamento di immagini memorizzate in file

Prima di tutto, notiamo che in Linguaggio HTML maniglia supportata , che consente di incorporare un'immagine specificando un percorso o un URL del file immagine, come nell'esempio seguente:

Questo costrutto si applica ai file di immagine statici, ma non c'è motivo per cui non possa essere utilizzato per iniettare un'immagine appena creata. Pertanto, è possibile preparare uno scenario in cui l'immagine viene prima creata, quindi i dati dell'immagine vengono scritti in un file locale, dopodiché viene generato il codice HTML con il descrittore appropriato indicando solo cos dato file.

Gli unici svantaggi di questo approccio sono che, in primo luogo, devi includere le operazioni di scrittura dei file nel processo di creazione della pagina, che può richiedere molto tempo, e in secondo luogo, devi capire cosa fare con i file quando sono finiti .

Ma in determinate situazioni, questo approccio è l'ideale. Riguarda sulla creazione e la memorizzazione nella cache di immagini che rappresentano un insieme finito di scelte. In questo caso esiste un certo modo di associare una particolare situazione al nome di un file immagine. Quando si verificano alcune di queste situazioni che richiedono l'output di un'immagine, controlla se il file corrispondente esiste già. In caso di risposta positiva, viene semplicemente applicato un collegamento a questo file, formattato come descrittore. , e se la risposta è negativa, viene creata un'immagine, scritta in un file, e quindi viene nuovamente applicato un collegamento a questa immagine. In definitiva, la formazione di nuovi file semplicemente non sarà richiesta.

Incorporamento di immagini generate negli script

Infine, non vi è alcun motivo per cui non sia possibile fornire uno script di imaging offline e quindi incorporare l'immagine risultante in pagina dinamica creato da un altro script, specificando nel descrittore L'URL di questo script. In questo caso, l'unica difficoltà è scegliere come passare i dati necessari alla pagina dipendente. Ad esempio, un descrittore che indica un'immagine incorporata potrebbe avere il seguente aspetto:

In questo caso, lo script ballpage.php restituisce immagini PNG di palline colorate in varie posizioni nel disegno.

Tuttavia, quando si utilizza questo approccio, possono verificarsi problemi di prestazioni, poiché i server Web e i browser a volte controllano i suffissi dei file in elaborazione e, dopo aver ricevuto i risultati del controllo, reagiscono in modi diversi. Ad esempio, allo script di rendering ballpage potrebbe essere necessario assegnare un'estensione .php affinché Apache possa determinare che il codice del server fornito deve essere interpretato come codice PHP (sebbene la modalità di elaborazione richiesta possa essere impostata anche utilizzando i file di configurazione).

Tuttavia, esistono alcune versioni non standard di browser che non tengono conto della possibilità che un file .php generi un'immagine, anche se l'intestazione passata indica che segue un'immagine. Pertanto, quando si utilizza il metodo specificato, è necessario archiviare gli script diversi browser e assicurati che il pubblico previsto di utenti riceva le pagine nel modo che intendevi.

Di seguito sono riportati esempi di utilizzo della libreria gd per creare immagini.

Un esempio di utilizzo della libreria gd: creazione di forme semplici

Nell'esempio seguente, mostreremo come generare un disegno contenente forme geometriche semplici utilizzando la libreria gd:

Un esempio di utilizzo della libreria gd: immagini frattali

Esiste già una meravigliosa tradizione di abbellire la presentazione del tema del disegno delle linee, che in linea di principio può sembrare poco interessante, usando i frattali come esempio. L'esempio seguente non solo mostra come creare a livello di codice un'immagine complessa, ma serve anche come buona dimostrazione della potenza del linguaggio PHP. Il fatto è che gli array e i tipi di dati non strettamente definiti di questo linguaggio rendono molto facile creare strutture di dati complesse corrispondenti a immagini frattali senza utilizzare un gran numero di dichiarazioni.

Un frattale è una forma geometrica simile a se stessa. Ciò significa che parti di un frattale hanno una forma simile all'intero frattale, anche parti di queste parti hanno una forma simile e così via.

Teoricamente, un frattale ideale può essere aumentato un numero illimitato di volte e creare parti sempre più piccole, pur continuando a rilevare la ripetizione degli stessi schemi. Ma in pratica, i frattali generati dal computer degenerano in forme non frattali, come normali segmenti di linee curve e rette, dopo aver utilizzato un numero limitato di operazioni di modellazione delle parti.

Un esempio di questo tipo di immagine che cercheremo di creare è mostrato nella figura sottostante:

Certo, a prima vista si ha l'impressione di una curva continua, ma questa immagine è semplicemente una raccolta di un gran numero di piccoli segmenti di linea, le cui estremità sono collegate sotto forma di una linea spezzata chiusa.

Il nostro compito è calcolare le coordinate dei punti finali di tutti questi segmenti di linea e quindi rappresentare correttamente tutti i segmenti come un'immagine PNG. Potremmo semplicemente assemblare un frammento di un'immagine frattale, ma abbiamo deciso di porci un compito più difficile: non solo garantire l'output di un'immagine frattale, ma anche formare una piccola infrastruttura che renda facile variare i parametri frattali e creare immagini di nuovi tipi.

Per cominciare, prepareremo alcune strutture dati che ci permettono di rappresentare forme complesse visualizzabili. Tali strutture dati dovrebbero fornire non solo calcoli intermedi, ma anche il disegno di segmenti, la cui posizione e lunghezza sono determinate dai risultati finali ottenuti. Innanzitutto, facciamo alcune ipotesi piuttosto arbitrarie:

  • un punto nel sistema di coordinate è dato da una coppia di numeri;
  • il percorso è rappresentato come un elenco di punti.

In definitiva, per disegnare una polilinea, è necessario tracciare segmenti di linea retta tra tutti i punti della linea. Se fosse necessario disegnare un singolo segmento di linea, allora questo compito potrebbe essere immaginato come disegnare una polilinea che passa attraverso due punti, e disegnare un rettangolo potrebbe essere immaginato come creare un'immagine di una linea spezzata che passa attraverso cinque punti (tenendo conto che il punto iniziale ricorre due volte in una linea spezzata e chiude il rettangolo quando riappare). (In questo caso, si potrebbe considerare un segmento di linea retta come un oggetto primitivo, ma, a quanto pare, quando si risolve il problema della creazione di immagini frattali, la rappresentazione sotto forma di una linea spezzata è più concisa.)

Consideriamo ora la questione di come dovrebbero essere rappresentati punti e polilinee. Il modo più semplice per rappresentare elenchi di oggetti è in PHP utilizzando gli array. Pertanto, prendiamo come base che un punto sia un array che include due numeri e una polilinea sia un array che include una serie di punti. Come risultato di questo approccio, dovrebbero essere create strutture che sono array PHP multidimensionali, ma se possiamo definire un costruttore e funzioni di accesso con nomi facili da ricordare, allora possiamo dimenticare quanto siano complesse queste strutture e sviluppare semplicemente il codice usando tali operazioni, come se queste strutture fossero tipi di dati reali.

Di seguito è riportato il codice per la creazione dell'immagine mostrata nella figura sopra. Definisce i tipi di dati in termini delle loro funzioni di creazione (i cui nomi iniziano con il prefisso make ), funzioni per accedere ai componenti delle strutture dati e funzioni per visualizzare un'immagine basata sui dati (i nomi di queste funzioni iniziano con il prefisso display). Con questo approccio, i punti non vengono emessi sullo schermo, quindi non ci sono funzioni di output per essi e le polilinee vengono disegnate disegnando segmenti di linea tra coppie successive di punti.

La funzione transform_path() prende come primo parametro la definizione di polilinea originale e come secondo parametro il nome di una funzione che prende come parametro la definizione di polilinea e restituisce come risultato la definizione di polilinea trasformata. Il terzo parametro della funzione transform_path() è la molteplicità dell'applicazione successiva di questa funzione per trasformare una polilinea in un'altra per creare una nuova polilinea. Il motivo per cui si è rivelato utile introdurre una tale funzione di secondo ordine è che altrimenti potrebbe essere necessario creare sempre più funzioni di looping ogni volta che è necessario generare un nuovo frattale. L'utilizzo di questo approccio consente di collegare diverse parti del codice di generazione frattale in una funzione separata che può essere passata alla funzione transform_path() ed evitare la duplicazione del lavoro.

La funzione spike accetta una definizione di polilinea come parametro e restituisce un'altra definizione di polilinea in cui ogni segmento di linea che passa attraverso due punti viene sostituito da una polilinea che passa attraverso cinque punti con un picco nel mezzo. E la funzione top-hat esegue un'azione simile, tranne per il fatto che la polilinea risultante passa attraverso sei punti e il picco risultante ha una forma rettangolare. Inoltre, questo esempio include molte altre funzioni per la creazione di polilinee con dimensioni standard, in cui gli angoli tra i segmenti sono retti; queste funzioni devono essere utilizzate come esempi rappresentativi.

Dopo aver caricato le definizioni di tutte le funzioni dai file di inclusione, questo codice crea un'immagine gd con l'altezza e la larghezza specificate, quindi i colori vengono distribuiti in questa immagine. (Lo sfondo è bianco e i segmenti di linea sono neri.)

L'esecuzione del codice di imaging frattale inizia con la creazione di una polilinea rettangolare chiusa standard passante per cinque punti e quindi comprendente quattro segmenti di linea (implicitamente specificati). Questa definizione di polilinea viene quindi passata alla funzione transform_path() come chiamata a questa funzione con parametri che indicano che la definizione di polilinea deve essere restituita, che è il risultato dell'applicazione della funzione spike() al rettangolo dato quattro volte. La trasformazione di una polilinea rettangolare chiusa inizia con l'elaborazione di quattro segmenti di linea e ogni segmento viene sostituito da quattro segmenti. Pertanto, come risultato di quattro iterazioni successive, si formano rispettivamente 16, 64, 256 e 1024 segmenti.

Dopodiché, resta solo da visualizzare sullo schermo la complessa polilinea chiusa formata. Per disegnare tutti i segmenti di linea sull'immagine, viene chiamata la funzione display_path() definita in questo codice, viene passata un'intestazione HTTP che indica che segue un'immagine PNG, viene chiamata la funzione imagepng() per la conversione e la visualizzazione, quindi viene chiamata la funzione gd interna la definizione dell'immagine viene distrutta:

Queste immagini possono richiedere molto tempo per la generazione e il rendering e il tempo aumenta con l'aumentare del numero di segmenti di linea creati, pertanto il server Web potrebbe eseguire il timeout dello script prima che l'immagine sia terminata. Per uscire da questa situazione, puoi ridurre il numero di passaggi di generazione nel codice di creazione dell'immagine frattale o aumentare i valori di timeout nei file di configurazione del server Web o dell'interprete PHP.

Naturalmente, sperimentare il codice per creare immagini frattali confina con l'arte e gli umili autori di questo articolo non si considerano artisti veramente talentuosi. Ma possiamo augurare ai lettori il successo nel migliorare tali immagini.

Nella maggior parte dei casi, la rappresentazione grafica dei dati è la più appropriata in una data situazione. Se anche i diagrammi sono interattivi, allora è assolutamente fantastico! Ciò che intendo? Facendo clic su un elemento del grafico si aprirà un altro grafico.

Cosa sono i diagrammi collegati?

Finora tali grafici corrispondevano a un solo flusso di dati e non erano completamente interconnessi. E se creassimo diagrammi che possiamo spostare avanti e indietro? Tali grafici sono chiamati grafici connessi e fanno parte del nuovo pacchetto FusionCharts 3.2, che consente di creare grafici multilivello estraendo i dati da un'unica fonte. In tali diagrammi, tutto è interconnesso.

In questo tutorial, esamineremo l'integrazione di tali diagrammi in un piccolo progetto. Il database MySQL conterrà i dati, PHP fungerà da collante che crea il file XML, FusionCharts prenderà quel file e produrrà i dati.

Qualche parola sui diagrammi collegati:

  • Per impostazione predefinita, un grafico figlio ha lo stesso tipo di visualizzazione (grafici a barre, ad esempio) del genitore;
  • È possibile aggiungere ulteriori impostazioni a qualsiasi livello della gerarchia, incluso il tipo di grafico stesso;
  • I grafici possono essere inseriti in contenitori HTML, finestre di dialogo jQuey, lightbox, finestre extJS, ecc.;
  • Supporto per eventi tramite JavaScript;

Cosa vogliamo fare?

Molte volte ci siamo trovati di fronte al compito di monitorare la crescita dei visitatori dei nostri siti. Creiamo quindi un piccolo progetto che mostrerà il numero di utenti registrati per mese/giorno/ora, o in altre parole, il numero di utenti registrati sul nostro sito per un certo periodo di tempo.

Requisiti:

  • Qualsiasi server web con PHP;
  • server MySQL con database;
  • FusionCharts, che puoi scaricare o acquistare dal loro sito web;

Passaggio 0. Preparazione

Crea un database vuoto chiamato fctutorialc.

Crea una cartella vuota chiamata fcdemo nella root del tuo server web (di solito www)

Passaggio 1. Preparare il database

Per semplificare le cose, utilizzeremo solo una tabella, utenti, che visualizzerà le informazioni dell'utente. Siamo interessati solo al momento della registrazione degli utenti. Quindi la nostra tabella conterrà solo queste informazioni. Incolla questo codice in phpMyAdmin:

CREATE TABLE `users` (`ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Time` timestamp NOT NULL DEFAULT "0000-00-00 00:00:00", PRIMARY KEY (`ID`), KEY `Time` (`Tempo`))

Abbiamo creato una tabella contenente 2 campi: ID e ora. time conterrà informazioni sull'ora di registrazione dell'utente. Si noti che abbiamo inserito un indice in questo campo perché useremo un insieme di condizioni WHERE. L'indice ci consentirà di accelerare il processo di campionamento.

Collegamento alla base

Scriviamo un piccolo script per connetterci al database:

Sostituisci le impostazioni con le tue e salva questo file come connect-to-database.php nella cartella fcdemo.

Inserisci dati casuali

Se questo fosse un vero progetto, allora la tabella degli utenti verrebbe riempita nel tempo, ma per la dimostrazione abbiamo bisogno di inserire alcuni dati. Scriviamo un piccolo script che inserirà dati casuali in una tabella. Non preoccuparti se non capisci il codice seguente: non è importante per questo tutorial.

Salva questo file come generate-random-data.php tutto nella stessa cartella.

Per prima cosa includiamo il file di connessione al database. Quindi impostiamo l'intervallo di tempo da cui verrà selezionato in modo casuale il tempo per la registrazione dell'utente. È possibile modificare il numero di righe da inserire. Per fare ciò, devi modificare la variabile $RecordsToInsert.

Quindi eseguiamo lo script per inserire i record generati nel database. Per avviare questo processo vai a questo indirizzo: http://localhost/fcdemo/generate-random-data.php.

Alla fine dovresti vedere un messaggio: "Record inseriti ($RecordsToInsert)"

Passaggio 2. Preparazione dello scheletro del sito

Dobbiamo creare il massimo pagina semplice per visualizzare il nostro grafico. Qualcosa come questo:

FusionCharts v3.2 - Demo PHP di LinkedCharts

Salva questo file come demo.html:

  • Nel cap includiamo la libreria JavaScript FusionCharts.js. Puoi trovarlo nella cartella Charts nel file zip di FusionCharts.
  • Nel cap abbiamo creato un contenitore per il nostro grafico.
  • Abbiamo creato un piccolo pezzo di codice che inizializza un oggetto FusionChart con i seguenti parametri:
    • Grafici/Column3D.swf - indirizzo del file swf. Per questo esempio, utilizzeremo un grafico Column3D.
    • myChartId è l'ID del grafico stesso. È necessario se stiamo creando più di un grafico.
    • I prossimi 2 parametri sono la larghezza e l'altezza del grafico.
  • myChart.setXMLUrl("get-data.php?anno=2010"); - definisce l'origine dati. Questa riga ci dice che i dati verranno presi dal file XML dalla pagina get-data.php?year=2010. Scriveremo il file get-data.php non appena avremo finito questo passaggio.

Quindi, abbiamo utilizzato 2 file dal pacchetto FusionCharts. Affinché tutto funzioni, devi metterli nella cartella fcdemo/Charts.

Passaggio 3. Preparare il back-end

FusionCharts funziona con dati in formato XML o JSON. Useremo il formato XML poiché è familiare a più pubblico. Un file di dati può contenere non solo informazioni per le colonne del grafico, ma anche elementi per la progettazione dei titoli. Dobbiamo fare in modo che il nostro sistema PHP legga le informazioni dal database e generi un file XML del seguente tipo:

Ecco come dovrebbero apparire le informazioni. Il tag del grafico dovrebbe contenere tutte le informazioni statistiche. Inoltre, puoi vedere altri tag responsabili del design e dei titoli.

Ora creiamo un file get-data.php che otterrà i dati dal database e creerà un file XML da esso:

"; //Genera il corpo XML del grafico: foreach($ResultArray as $key => $val) // la chiave è il numero del mese (1-12) $Output .= " "; //Chiudi il grafico XML $Output .= ""; //Imposta intestazione XML header("Content-type: text/xml"); //Invia echo $Output; ?>

Salva questo file come get-data.php. Esaminiamo il codice:

  • Prima di tutto filtriamo i dati in entrata $_GET["year"];
  • Successivamente, contiamo il numero di utenti che si sono registrati sul nostro sito in un dato anno. Il risultato viene raggruppato utilizzando GROUP BY.
  • Successivamente, formiamo l'array $ResultArray costituito dal numero di mesi.
  • Il nome del grafico viene scritto nella variabile X-Axis.
  • Ci colleghiamo al database e facciamo una richiesta.
  • Successivamente, copiamo il risultato in un array, riga per riga. Se non viene trovato alcun utente registrato come risultato della richiesta, vogliamo visualizzare il valore 0. Ecco perché abbiamo scritto zeri nell'array $ResultArray. Ciò è necessario per ordinare l'array.
  • Successivamente, creiamo l'intestazione del file XML. Scriviamo tutte le informazioni necessarie sul grafico in $ChartHeading. Qui impostiamo tutte le intestazioni e i colori necessari.
  • Successivamente, prepariamo il corpo del nostro file XML concatenando le stringhe nella variabile $Output. Tutto quello che c'è sono i tag .
  • Per completare il documento XML, lo chiudiamo con il tag .
  • Impostiamo anche il valore del tipo di contenuto in modo che il programma capisca quale formato deve gestire.

Per vedere il codice XML generato, vai su http://localhost/fcdemo/get-data.php?year=2010.

Dovresti vedere qualcosa di simile a quello che hai visto all'inizio di questo passaggio.

Proviamo

Ora che tutto è pronto, possiamo testare il nostro esempio. Apri il tuo browser e vai su http://localhost/fcdemo/demo.html.

Se hai fatto tutto correttamente, sulla tua pagina verrà visualizzato il seguente diagramma:

Passaggio 4. Trasformare il nostro diagramma in un diagramma connesso

Per trasformare il nostro diagramma in un diagramma connesso, dobbiamo decidere quale parametro passeremo al diagramma figlio. Possiamo passare l'intera stringa di dati o l'URL dei dati. Se scegli il primo caso, i dati per ogni figlio verranno incorporati nei diagrammi principali e la relazione tra loro avverrà tramite identificatori univoci. Nel nostro caso, abbiamo molti diversi tipi di grafici (12 mesi, 30 giorni, 24 ore). Quindi useremo la stringa url per passare i dati. Pertanto, tutto ciò che dobbiamo fare è collegare i dati agli URL negli hotspot (hotspot che, se cliccati, apriranno un nuovo grafico).

Miglioriamo il codice PHP:

Poiché dobbiamo selezionare per mese, giorno e ora, dobbiamo modificare un po' il codice PHP. Diamo prima un'occhiata e poi lo analizzeremo pezzo per pezzo.

"; // Genera il corpo XML del grafico: switch($Type) ( default: case "monthly": foreach($ResultArray as $MonthNumber => $value) // Mesi (1-12) $Output .= " "; break; case "daily": foreach($ResultArray as $DayNumber => $value) // Giorni (1-31) $Output .= " "; break; case "hourly": foreach($ResultArray as $NumeroOra => $valore) // Ore (0-23) $Output .= " "; break; ) // Chiude l'XML: $Output .= ""; // Imposta l'intestazione dell'intestazione XML ("Tipo di contenuto: testo/xml"); // Invia echo $Output; ?>

Cosa abbiamo cambiato?

  • Ora, poiché abbiamo diversi tipi di grafici disponibili, il tipo di grafico ci verrà passato tramite $_GET. Lo stesso con $Mese e $Ora e $Anno;
  • Successivamente, creiamo l'array $MonthNames, che conterrà i nomi dei mesi. Poiché l'array inizia da zero, il primo elemento è nullo;
  • Ora, a seconda del tipo, nello switch vengono assegnate le variabili $Query, $ResultArray, $ChartHeading e $XAsixName. Se $Type non è impostato, i mesi verranno visualizzati per impostazione predefinita;
  • Successivamente ci colleghiamo al database, eseguiamo la richiesta, copiamo il risultato in un array e generiamo la prima parte del file xml;
  • Successivamente, generiamo il corpo del file XML. Poiché il corpo dipende dal tipo di grafico, utilizziamo di nuovo switch;
  • Mesi: tutti uguali tranne il link. Ora sarà così: newchart-xmlurl-get-data.php; newchart - indica che stiamo creando un nuovo grafico, xmlurl - a quale indirizzo cercare i dati. Tutto ciò che segue fa parte dell'URL. Ecco il link completo per il mese di gennaio: newchart-xmlurl-get-data.php?type=hourly&Year=2010&Month=1
  • Giorni: come per il mese, solo che ora l'URL contiene informazioni relative ai giorni;
  • Orologio: se non vogliamo che un altro grafico segua questo grafico, semplicemente non impostiamo un URL per esso;
  • Alla fine, chiudiamo l'XML;

Salva questo file come get-data.php; Ora apri un browser e prova lo script. Ad esempio: http://localhost/fcdemo/get-data.php?year=2010

Dovresti vedere qualcosa del genere:

Test

Ora abbiamo completamente finito con i diagrammi. Per controllare il lavoro vai su http://localhost/fcdemo/demo.html

Se hai fatto tutto correttamente, vedrai un diagramma Column3D sulla pagina. Se fai clic su una delle colonne, si aprirà un nuovo grafico. E così via…

Conclusione

Se hai studiato attentamente questa lezione, molto probabilmente hai già un'idea generale dei diagrammi collegati in PHP / MySQL. È possibile creare esattamente gli stessi grafici per le seguenti statistiche:

  • Numero di vendite in un periodo di tempo;
  • Quante volte il tuo sito ha smesso di funzionare;
  • Il numero di visitatori di una determinata pagina;

La struttura del diagramma sarà la stessa per qualsiasi argomento. Usa qualche parametro per recuperare informazioni dal database, quindi trasforma la risposta in XML e il gioco è fatto, il diagramma è pronto!

Per ulteriore ispirazione, puoi visitare questa pagina demo. Grazie per l'attenzione!

La stampa in PHP è possibile in due modi. Puoi disegnarlo tu stesso o usare una libreria. Suggerisco di imparare a creare grafici da soli. Primo, perché le buone biblioteche sono pagate. In secondo luogo, utilizzando qualsiasi libreria, sei limitato dalla sua funzionalità. È meglio disegnare tu stesso i grafici.

Iniziamo con l'opzione più semplice. C'è un array contenente il numero di utenti che si sono registrati al sito in 5 giorni.

$mas = matrice(2, 7, 20, 9, 14);

Visualizziamo questo array sulla pagina come un grafico. Disegniamo prima gli assi delle coordinate.

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

Commenti:

3 - crea un'immagine

7, 8 - assi x e y

9-13 - serif sull'asse x

14-18 - numeri sull'asse x

19, 20 - serif sull'asse y

21, 22 - numeri sull'asse y

Il disegno dovrebbe assomigliare a questo:

Per tracciare una linea su un grafico, devi trovare dei punti su di essa, in base ai quali verrà tracciata la linea. In pratica, puoi trovare immediatamente un punto e tracciare una linea lungo di esso. Ma per rendere più chiaro l'esempio, divideremo il problema in due parti. Innanzitutto, trova tutti i punti, quindi disegna un grafico basato su di essi. Per fare ciò, creeremo un array bidimensionale, che conterrà le coordinate x e y di ciascun punto. Per trovare le coordinate, abbiamo bisogno di un punto di riferimento. Questo è il punto in cui gli assi delle coordinate si intersecano. Nel nostro disegno, ha coordinate x: 50, y: 250 pixel. Per determinare la posizione di ciascun punto, è necessario utilizzare la scala del grafico. Nell'esempio, impostiamo noi stessi la scala. Sull'asse x, vengono creati 100 pixel per ogni giorno. Il primo giorno si trova a una distanza di 100 pixel dall'origine, il secondo a una distanza di 200 pixel e così via. Quindi la coordinata x per il primo giorno è 50 + 100 = 150. Per il secondo giorno 50 + 200 = 250.

Sull'asse y, vengono assegnati 100 pixel per ogni 10 utenti. Significa per un utente - 10 pixel. Va tenuto presente che l'asse y dell'immagine è diretto verso il basso, il che significa che non è necessario aggiungere un valore al punto di riferimento, ma sottrarlo. Il primo giorno, 2 visitatori si sono registrati sul sito. La coordinata per questo valore è 250 - (2 * 10) = 230. Per il secondo giorno 250 - (7 * 10) = 180. Pertanto, l'array con le coordinate dei punti è il seguente:

Il grafico ha questo aspetto:

Abbiamo considerato la variante più semplice del plottaggio. Sapevo in anticipo il numero di giorni e il numero massimo di utenti. Pertanto, ho scelto io stesso la scala del grafico. Ma di solito questi dati possono essere diversi e la scala deve essere calcolata. E il grafico stesso sembra un po' diverso. Siamo abituati al fatto che gli assi delle coordinate partano da zero. Ma per comodità di visualizzazione, questa regola a volte non viene rispettata. L'asse x non inizia da 0, ma da 1, in modo che non ci sia spazio vuoto a sinistra della linea. E l'asse y viene mostrato in modo che tutti i valori si adattino al grafico. Ad esempio, se il valore minimo è 60 e il valore massimo è 70, l'asse y contiene tale intervallo. Prendi in considerazione la creazione di un grafico di questo tipo.

Nell'esempio, l'asse x è lungo 570 pixel. Deve essere diviso in segmenti identici per ogni giorno. L'asse x non inizia da 0, ma da 1. Pertanto, non ci saranno segmenti tra 0 e 1 e il numero di segmenti diminuisce di 1. Se ci sono 5 giorni, si otterranno 4 segmenti. La formula per calcolare la lunghezza del segmento è:

lunghezza = lunghezza dell'asse / (numero di giorni - 1)

Il numero potrebbe risultare frazionario, quindi il risultato deve essere arrotondato per difetto.

570 - 50 è la lunghezza dell'asse x. Dipende dalla dimensione dell'immagine.

Realizziamo l'asse y in modo tale che tutti i valori si adattino. Devi ottenere i valori minimo e massimo. Dovrebbero occupare l'intera altezza del grafico. Conoscendo l'intervallo, possiamo calcolare quanti pixel dovrebbero corrispondere a un utente sul grafico.

intervallo = massimo - minimo

lunghezza = lunghezza / intervallo dell'asse

Anche il numero risultante deve essere arrotondato.

Molto spesso, quando crei alcuni servizi, devi farlo disegnare vari grafici. Ad esempio, se stai creando una rete pubblicitaria, puoi creare dipendenze dal numero di clic sui materiali pubblicitari al giorno. Se si tratta di una sorta di negozio online, puoi creare grafici delle entrate del negozio. Come disegnare grafici in PHP Spiegherò di seguito.

Innanzitutto, puoi fare tutto da solo scrivendo la tua libreria. Qui bisogna tenerne conto le coordinate in PHP vanno su a destra e giù, mentre in matematica vanno a destra e in alto. Altrimenti, niente di particolarmente complicato.

Tuttavia, se non hai davvero voglia di scrivere, allora c'è solo una meravigliosa libreria che ti consente di creare un'ampia varietà di grafici, diagrammi, istogrammi e altro ancora. Un sacco di funzioni diverse (segno degli assi, disegno di diversi grafici su un asse, disegno delle soglie, visualizzazione di una legenda, ecc.) rendono questa libreria davvero universale.

La biblioteca si chiama pGrafico: .

ti faccio un esempio:

/* Includi classi */
require_once "pChart/pData.class";
require_once "pChart/pChart.class";
$DataSet = nuovo pData(); // Crea oggetto pData
$DataSet->AddPoint(array(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100), "Serie1"); // Carica i dati del grafico 1
$DataSet->AddPoint(array(0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000), "Serie2"); // Carica i dati del grafico 2
$DataSet->AddAllSeries(); // Aggiungi tutti i dati da compilare
$Test = new pChart(700, 230); // Disegna il piano grafico
$Test->setFontProperties("Fonts/tahoma.ttf", 8); // Imposta il carattere
$Test->setGraphArea(50, 30, 585, 200); // Imposta l'area del grafico
$Test->drawFilledRoundedRectangle(7, 7, 693, 223, 5, 240, 240, 240); // Seleziona il piano con un rettangolo
$Test->drawRettangoloArrotondato(5, 5, 695, 225, 5, 230, 230, 230); // Crea il contorno del piano grafico
$Test->drawGraphArea(255, 255, 255, true); // Disegna il piano grafico
$Test->drawScale($DataSet->GetData(), $DataSet->GetDataDescription(), SCALE_NORMAL, 150, 150, 150, true, 0, 2); // Disegna assi e grafico
$Test->drawGrid(4, true, 230, 230, 230, 50); // Disegna la griglia
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription()); // Collega i punti del grafico con le linee
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(), 3, 2, 255, 255, 255); // Disegna punti
$Test->drawTitle(50, 22, "sito", 50, 50, 50, 585); // Visualizza il titolo del grafico
$Test->Stroke(); // Visualizza il grafico nella finestra del browser;
?>

In questo esempio, costruiamo una parabola e una parabola cubica, quindi visualizziamo questo grafico nel browser. Puoi anche salvare il grafico in un file, per questo invece di Colpo() dovrebbe essere utilizzato il metodo Render("nomefile.png").