Visita Orebla.it su Facebook Segui Orebla.it su Twitter Vedi i video su YouTube di Orebla.it Unisciti alle cerchie di Orebla.it
DOVE TI TROVI: \\ Home Page\php\ Come creare una firma dinamica in PHP e GD, la Guida

PHP Avanzato: Creazione immagini con librerie GD

autore: Orebla
xx/xx/xx

Creare una firma dinamica in PHP e GD, la Guida

Prefazione:

Iniziamo in tanto con lo spiegare cos'è una firma dinamica. Una firma dinamica ci permette di rendere più bella la nostra presenza su un forum e poi ci permette di pubblicizzare il nostro sito se vogliamo, dirigendo la dinamicità della nostra firma verso i dati del nostro website, cioè visitatori utenti del forum insomma tutti i dati che vogliamo e tutto ciò apparirà agli occhi di tutti come una semplice immagine.

 

Gli strumenti:

Cosa serve per produrre tutto ciò? Per prima cosa ricordo che non è richiesto da parte dell'utente nessun requisito minimo speciale. Infatti le immagine (png/jpg/gif) sono visualizzabili su qualunque Browser (Internet Explorer, Mozilla Firefox, Opera).

Viene invece richiesto qualcosa di più per la creazione, infatti dovremo avere a nostra disposizione le librerie GD con supporto PHP, la versione non importa dato che vi sono frequenti aggiornamenti. Per trovare le librerie vi basta fare un giro sul sito ufficiale di PHP.net.

Dalla versione 5 di PHP questa libreria per quasi tutti i tipi di immagini sono incluse nei moduli, per attivarle vi basta aprire il file php.ini e arrivare alla riga che presenta questa stringa : ;extension=php_gd2.dll  (sono compresi i punto e virgola). Arrivati qui vi basta levare i ";" (punto e virgola) da davanti per attivare le librerie relative GD.

 

Ovviamente tutto questo, da parte della creazione, pretende l'ausilio di un web Server e dei moduli PHP.

 

I caratteri delle librerie GD:

Ora avremo bisogno per la creazione della nostra firma dinamica di fonts compatibili per poi ottenere come output l'immagine.

Più informazioni a questo indirizzo: Gd fonts.

Possiamo anche crearci il nostro fonts, alcuni link per approfondire l'argomento:

-User-defined Bitmap Fonts Guide

-GD Fonts for PHP imageloadfont()

 

Le configurazioni di Apache:

Prima cosa, dobbiamo creare tutte le nostre cartelle dove metteremo i nostri file per ottenere la nostra firma digitale:

root/firma/
root/fonts_gd/
root/include/
root/immagine/

Dopo aver creato le nostre cartelle possiamo procedere con le configurazioni necessarie, ci basta creare due file .htacces. Il primo è da salvare nella cartella /firma/. Creiamo quindi questo file .htacces:

1-Apriamo il Notepad e mettiamo all'interno il seguente testo:


SetHandler application/x-httpd-php


2- Salviamo il tutto nella cartella /firma/ con conf.txt, ora dopo averlo salvato rinominiamolo come .htaccess ;

Questo dice al server Apache di processare i file PNG come se fossero script PHP. Questo ci serve per generare le nostre firme dinamiche in quanto sono script PHP ma poi le rinomineremo in PNG, per permetterci di richiamarla proprio come un immagine.

Ora dobbiamo creare un altro htaccess file da mettere nella cartella /immagine/:

1- Apriamo il Notepad e scriviamo quanto segue:


order deny,allow
deny from all


2- Salviamo il tutto nella cartella sopra citata (cioè /immagine/) come conf.txt, poi lo rinominiamo come .htacces ;

Questo a differenza del primo impedisce a chiunque di ottenere accesso HTTP diretto alla cartella immagini (spiegheremo poi cosa conterrà), restituendo un HTTP 403 error.

 

Carichiamo le risorse:

Se avete trovato qualche GDFonts che vi interessa lo potete utilizzare e caricare nella cartella /fonts_gd/.

Ora per questa firma noi utilizzeremo una immagine di sfondo già creata, per ottenere così una migliore personalizazzione. Create quindi una immagine di sfondo come queste:

Dimensioni:
Width: 39
Height: 380
Salviamola quindi nella cartella /immagini/ e la chiamiamo personal.gif.

Creiamo quindi uno script PHP e lo salviamo nella cartella /include/ chiamandolo imm_dinamica.php;
Ecco il testo dello script:


$gdfonts = array(
'8x13iso', '9x15iso', 'andale12', 'atommicclock', 'bmreceipt',
'chowfun', 'courier8', 'dimurph', 'georgia8', 'proggyclean',
'proggysquare', 'systemex', 'terminal6', 'trisk'
);

//
//
//
if( !isset($image_info) || !isset($image_text) )
{
exit;
}

//
//
//
$sz = @getimagesize('./immagini/'.$image_info['image']);
if( !$sz )
{
exit;
}
$image_w = $sz[0];
$image_h = $sz[1];

//
//
//
@header('Content-type: image/png');

$im = @imagecreatefromgif('./immagine/'.$image_info['image']);
$rgb = ( isset($image_info['color']) ? $image_info['color'] : array(255, 255, 255) );
$bgColor = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);

for( $i = 0; $i < count($image_text); $i++ )
{
if( !is_numeric($image_text[$i]['font']) )
{
$font = 1;
}
else if( $image_text[$i]['font'] < 0 )
{
$font = $image_text[$i]['font'] * -1;
}
else
{
if( !($font = @imageloadfont('./fonts_gd/'.$gdfonts[$image_text[$i]['font']].'.gdf')) )
{
$font = 1;
}
}
$rgb = $image_text[$i]['color'];
$fgColor = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
imagestring($im, $font, $image_text[$i]['x'], $image_text[$i]['y'], $image_text[$i]['text'], $fgColor);
}

imagepng($im);
imagedestroy($im);


L'Array $gdfonts lo potete personalizzare inserendo i nomi dei Fonts che avete caricato nella cartella /fonts_gd/.

Creiamo la nostra firma dinamica:

Adesso scriviamo il nostro primo script che genererà la nostra prima firma dinamica, inseriamo questo script PHP:


$image_info = array(
'image' => 'personal.gif'
);

$image_text = array(
array(
'x' => 8,
'y' => 6,
'color' => array(50, 100, 180),
'font' => 9,
'text' => " Ecco la firma dinamica"
),
array(
'x' => 8,
'y' => 22,
'color' => array(50, 100, 180),
'font' => 9,
'text' => " Bella?? "
)
);

include('./include/imm_dinamica.php');


Una volta inserito questo codice nello script PHP salviamolo come fir_dinamica.png, il risultato sarà questo:

 

Spieghiamo un po' il codice presente:

  • $image_info['image']: questo è il nome dell'immagine di sfondo salvata in root/firma/immagini. Notate che l'immagine è GIF se volete creare una firma dinamica con alri tipi di immagini di sfondo dovete modificare il seguente file: root/sig/include/imm_dinamica.php.
  • $image_text: in questo sono contenute le informazioni per creare le scritte, noterete che sono presenti diversi elementi: X, Y, COLOR, FONT e TEXT. Sono rispettivamente le coordinate da dove far iniziare la scritta (X,Y) vi ricordo che non sono nell'ordine come un normale grafico cartesiano; poi vi è definito lo stile del colore tramite un array che definisce le parti di Rosso (primo elemento), Verde (secondo elemento) e Blu(terzo elemento); ricordatevi che i  numeri vanno da 0 a 255.
    Invece il Font presenta il numero dell'elemento dell'array presente in imm_dinamica.php.
 

Inseriamo i dati del nostro forum phpBB:

Se invece siamo interessati ad inserire alcuni dati relativi al nostro forum phpBB non ci vuole altro che il codice per interrogare le tabelle di phpBB e poi inserire il risultato in una variabile ed inserirla nell'array $image_text.

Mettiamo per esempio che vogliamo far comparire l'ultimo messaggio inviato compreso di autore, ecco il codice:

//
// Setup the relative path to your phpBB folder...
//
$phpbb_root_path = '../phpBB2/';

//
// Initialize phpBB and user session...
//
define('IN_PHPBB', true);
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

//
// Get the list of forums the current user is allowed to view...
//
$is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata);
$auth_data_sql = '';
foreach( $is_auth_ary as $fid => $is_auth_row )
{
if( $is_auth_row['auth_view'] )
{
$auth_data_sql .= ( $auth_data_sql != '') ? ', ' . $fid : $fid;
}
}
if( empty($auth_data_sql) )
{
$auth_data_sql = -1;
}

//
// Retrieve the latest active topic title...
//
$sql = "SELECT t.topic_title, u.username, p.post_time
FROM ". TOPICS_TABLE ." AS t,
". FORUMS_TABLE ." AS f,
". USERS_TABLE ." AS u,
". POSTS_TABLE ." AS p
WHERE f.forum_id = t.forum_id
AND t.topic_last_post_id = p.post_id
AND p.poster_id = u.user_id
AND f.forum_id in ( $auth_data_sql )
ORDER BY t.topic_last_post_id DESC
LIMIT 1";
if( !($result = $db->sql_query($sql)) || !($row = $db->sql_fetchrow($result)) )
{
// Uncomment the following line for debug purposes
// message_die(GENERAL_ERROR, 'Could not query DB', '', __LINE__, __FILE__, $sql);
$text = array(
"Sorry, I couldn't retrieve the requested information.",
""
);
}
else
{
$post_date = create_date($board_config['default_dateformat'], $row['post_time'], $board_config['board_timezone']);
$text = array(
"Latest post by " . $row['username'] . ', ' . $post_date,
"Title: " . $row['topic_title']
);
}
// --------------------------------------------------------------------------------

$image_info = array(
'image' => 'personal.gif'
);

$image_text = array(
array(
'x' => 8,
'y' => 6,
'color' => array(50, 100, 180),
'font' => -2,
'text' => $text[0]
),
array(
'x' => 8,
'y' => 21,
'color' => array(50, 100, 180),
'font' => -2,
'text' => $text[1]
)
);

include('./include/imm_dinamica.php');


Ecco ora non dobbiamo salvare questo file nella cartella /firm/ e chiamarlo come phpbb_firma.png.

 

Conclusioni e Ringraziamenti:

Questa guida è stata scritta volutamente così, cioè semplice e non piena di esempio su come creare query difficili per estrarre dati dal database oppure riconoscere Browser e Sistemi Operativi, giusto per essere alla portata di tutti. Stà poi a voi di creare aggiunte per ottenere diverse informazioni oppure diverse immagini. Saranno poi rilasciate più avanti altre guide di supplemento per spiegare come fare per ottenere diverse info.

Devo dare però tutto il merito di questa guida ai siti da cui ho preso spunto, il sito principale è stato www.phpmix.com.









Recensione iPhone 5S!

Recensione iPhone 5!