PDA

View Full Version : PHP - Disegnare immagini


negator136
26-07-2006, 19:08
<?php





$num = rand(0,9) . rand(0,9) . rand(0,9);

$font_number = 4;

$width = 2 * strlen($num) * imagefontwidth($font_number);
$height = 3 * imagefontheight($font_number);

$back_color = imagecolorallocate($image, 200, 200, 200);

$drawing_color = imagecolorallocate($image, 0, 0, 0);

$x_position = ($width - (strlen($num) * imagefontwidth($font_number)))/2;
$y_position = ($height - imagefontheight($font_number))/2;

imagestring($image, $font_number, $x_position, $y_position, $text, $drawing_color);

header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

?>

sto provando a far comparire 3 numeri all'interno di un immagine rettangolare... il codice è praticamente identico a quello che ho trovato su un manuale e non mi pare ci siano errori.

il problema è che quando carico la pagina mi dice:
Fatal error: Call to undefined function: imagefontwidth() in D:\Inetpub\webs\ameronicom\blog\code_image.php on line 11

ma cavolo... se non trova quella funzione io cosa ci posso fare? :muro:

possibile che manchino delle librerie al server php di aruba? :muro:

poi magari ho solo sbagliato il codice... speriamo... :p

help please! :)

andbin
26-07-2006, 20:01
poi magari ho solo sbagliato il codice... speriamo... :p Scusa, ma il codice è tutto lì?? E la creazione di $image? E $text?

nardellu
26-07-2006, 20:15
<?php
// crea l'immagine
$im = imagecreatetruecolor(105, 30);

// imposta sfondo e il testo
$bg = imagecolorallocate($im, 200, 156, 215);
$textcolor = imagecolorallocate($im, 100, 100, 0);

// scrive la scritta in alto a sinistra
imagestring($im, 10, 0, 0, "Hello world!", $textcolor);

// output immagine
header("Content-type: image/jpeg");
imagejpeg($im);

?>

Prova questo codice semplicissimo!!! :D

Ma ti posso garantire che sul mio hosting aruba funge benissimo...

Nel tuo ci sono alcuni errori: proprio come dice andbin!!!

tipo:

la funzione imagestring($image,...).

La variabile $image deve essere dichiarata prima di utilizzare questa funzione... proprio come l'esempio sopra:
(Naturalemente $im equivale alla tua $image!! OK?)

$im = imagecreatetruecolor(105, 30); poi

imagestring($im, 10, 0, 0, "Hello world!", $textcolor);

Cmq per i manuali vai su www.php.net (http://www.php.net) e non sbagli!!!! :D

negator136
26-07-2006, 20:19
:muro: avete ragione... mancavano un paio di cose :D

<?php

session_start();

$num = rand(0,9) . rand(0,9) . rand(0,9);

$_SESSION['key'] = $num;

$font_number = 4;

$width = 2 * strlen($num) * imagefontwidth($font_number);
$height = 3 * imagefontheight($font_number);

$image = imagecreate($width, $height);

$back_color = imagecolorallocate($image, 200, 200, 200);

$drawing_color = imagecolorallocate($image, 0, 0, 0);

$x_position = ($width - (strlen($num) * imagefontwidth($font_number)))/2;
$y_position = ($height - imagefontheight($font_number))/2;

imagestring($image, $font_number, $x_position, $y_position, $num, $drawing_color);

header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

?>

però il problema persiste :muro:

ora provo il tuo nardellu :)

EDIT: http://www.ameroni.com/prova.php
stesso problema col codice di nardellu! :cry: (il mio hosting di aruba è su windows... il tuo?)

andbin
26-07-2006, 20:36
Quest'ultimo tuo codice a me, sul mio server in locale, funziona senza problemi.

Solo per sapere: quale versione della libreria GD hai???

negator136
26-07-2006, 20:40
Quest'ultimo tuo codice a me, sul mio server in locale, funziona senza problemi.

Solo per sapere: quale versione della libreria GD hai???

in locale purtroppo ho una versione un po' vecchia di php...

ma la cosa che mi spiace di più è che non vada sul server di aruba...

come faccio a vedere che librerie ha? :stordita:

andbin
26-07-2006, 20:43
come faccio a vedere che librerie ha? :stordita:Fai una pagina di "phpinfo":
<?php
phpinfo();
?>oppure, più specifico per la libreria GD:
<?php
var_dump(gd_info());
?>

negator136
26-07-2006, 20:49
www.ameroni.com/info.php
www.ameroni.com/gd.php

:)

andbin
26-07-2006, 20:58
www.ameroni.com/info.php
www.ameroni.com/gd.phpNada ... nel phpinfo non c'è traccia della GD e la gd_info() sembra non essere supportata! (è disponibile per PHP 4 >= 4.3.0, PHP 5).

Ho una vaga (ma proprio vaga) impressione che abbiano messo una libreria GD un po' "pasticciata". :D

negator136
26-07-2006, 21:02
Nada ... nel phpinfo non c'è traccia della GD e la gd_info() sembra non essere supportata! (è disponibile per PHP 4 >= 4.3.0, PHP 5).

Ho una vaga (ma proprio vaga) impressione che abbiano messo una libreria GD un po' "pasticciata". :D


scusa se non capisco al volo... stai dicendo che sul mio server c'è una versione di php obsoleta? :confused:

però in effetti io ho la 4.4.1... quindi dovrebbe esserci anche la libreria gd :(

andbin
26-07-2006, 21:07
scusa se non capisco al volo... stai dicendo che sul mio server c'è una versione di php obsoleta? :confused:No, sul quel server c'è PHP 4.4.1 e l'ultima versione ufficiale, al momento, è la 4.4.2. Quindi è molto aggiornata quella sul server.
È il modulo della libreria GD che lascia un po' perplessi ... :stordita:

quindi dovrebbe esserci anche la libreria gdIl fatto è che è una dll esterna, un modulo che si aggancia al php. E sembra che l'abbiamo, per così dire, "camuffata".

negator136
26-07-2006, 21:09
No, sul quel server c'è PHP 4.4.1 e l'ultima versione ufficiale, al momento, è la 4.4.2. Quindi è molto aggiornata quella sul server.
È il modulo della libreria GD che lascia un po' perplessi ... :stordita:

ricevuto... nel frattempo avevo editato l'altro messaggio... sorry

vedrò di far chiarezza con quelli di aruba anche su questo punto... :(

grazie mille per l'aiuto :)

negator136
27-07-2006, 09:29
Risposta di aruba:

le librerie GDlib o ImageMagick sono native in ambiente *nix e sono quindi presenti solo su Hosting Linux: su Hosting Windows non e' possibile attivarle per precisa scelta di salvaguardia delle prestazioni dei server e non sono presenti in tale ambiente librerie grafiche.
In caso si necessiti di tali librerie e' quindi possibile eseguire l'upgrade (tramite l'area conversioni del sito hosting.aruba.it) del proprio servizio, da hosting Windows a Hosting Doppio Win+Linux, usufruendo in questo modo dell'ambiente nativo Linux. Resto a disposizione per ulteriori chiarimenti.

:rolleyes: :cry:

PhantomX
27-07-2006, 09:30
php su hosting windows non ha le GD. se vuoi le GD devi per forza scegliere hosting linux.

negator136
27-07-2006, 09:31
php su hosting windows non ha le GD. se vuoi le GD devi per forza scegliere hosting linux.

ma in generale o solo su aruba? :mbe:

PhantomX
27-07-2006, 09:33
non lo so se è in generale... ma comunque se ti leggi le FAQ sul sito di aruba cè scritto in chiaro.

andbin
27-07-2006, 10:25
ma in generale o solo su aruba? :mbe:Guarda ... l'estensione per la libreria GD è disponibile ed utilizzabile tranquillamente con il PHP su Windows.
Io ho un Win2000 e in locale ho Apache+PHP+MySQL. Mi è bastato andare nel php.ini, togliere il commento ';' alla riga ;extension=php_gd2.dll e voilà! Ho la libreria GD. :)

Se poi quelli di aruba non la vogliono mettere sui loro hosting Windows ... è un'altra storia. ;)

hargon
27-07-2006, 10:42
sì confermo, aruba...
non attiva su piattaforma win :(

nardellu
27-07-2006, 11:13
Guarda ... l'estensione per la libreria GD è disponibile ed utilizzabile tranquillamente con il PHP su Windows.
Io ho un Win2000 e in locale ho Apache+PHP+MySQL. Mi è bastato andare nel php.ini, togliere il commento ';' alla riga ;extension=php_gd2.dll e voilà! Ho la libreria GD. :)

Se poi quelli di aruba non la vogliono mettere sui loro hosting Windows ... è un'altra storia. ;)


aruba sarà anche il più conveniente... ma ne fà di cavolate assurde...

tipo il comando chmod tramite ftp... stranamente lo hanno disattivato!! :(

NetZiro
28-07-2006, 01:54
Edit