- Home
- Categorie
- Coding e Sistemistica
- Coding
- Aggiungere bordo ad una immagine con Lib. GD
-
Allora, ho agito così:
function ApplicaBordo(&$imres){ $h = imagesy($imres)-1; $w = imagesx($imres)-1; $white = imagecolorallocate($imres, 255, 255, 255); $black = imagecolorallocate($imres, 0, 0, 0); imagerectangle($imres, 0, 0, $w, $h, $black); // Bordo composto da una linea esterna nera imagerectangle($imres, 1, 1, $w-1, $h-1, $white); // e da una linea interna bianca } $conbordo = ApplicaBordo($HTTP_POST_FILES['file']['tmp_name']); $nome1 = "".$tot_records."-".$nome_0.""; copy($conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1); unlink($HTTP_POST_FILES['file']['tmp_name']);
Applico la funzione che crea il bordo all'immagine che c'è nella dir temporanea ed assegno alla variabile $conbordo l'immagine elaborata avente i bordi.
Poi copio questa immagine coi bordini nella directory voluta con il nome voluto.
Infine cancello la immagine nella directory temporanea.Ho provato a lanciare la pagina ma mi da questi errori
Warning: imagesy(): supplied argument is not a valid Image resource in /home/vhosts/sito.it/var/www/html/dir/upload-save.php on line 123 Warning: imagesx(): supplied argument is not a valid Image resource in /home/vhosts/sito.it/var/www/html/dir/upload-save.php on line 124
Sbaglio a passare l'immagine? Non so come si applicano queste funzioni alle immagini.
-
Alla funzione imagesx non devi passare il nome del file immagine ma un identificativo di immagine che puoi ottenere, ad esempio, con [url=http://it.php.net/manual/it/function.imagecreatefromjpeg.php]imagecreatefromjpeg (e vari altri)
-
@margheritebianche said:
Alla funzione imagesx non devi passare il nome del file immagine ma un identificativo di immagine che puoi ottenere, ad esempio, con [url=http://it.php.net/manual/it/function.imagecreatefromjpeg.php]imagecreatefromjpeg (e vari altri)
Quindi mi basta, in teoria modificare lo script sopra così:$imres = @imagecreatefromjpeg($HTTP_POST_FILES['file']['tmp_name']);
E dovrebbe funzionare.Provo subito,
Grazie infinite.
-
Mi sono spariti quei messaggi ma me ne è apparso uno di nuovo
Warning: copy(): Unable to access in /home/vhosts/skiforum.it/var/www/html/skiforum/upload-save.php on line 137
e la linea dice:
copy($conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1);
L'intero codice è il seguente:
function ApplicaBordo(&$imres){ $h = imagesy($imres)-1; $w = imagesx($imres)-1; $white = imagecolorallocate($imres, 255, 255, 255); $black = imagecolorallocate($imres, 0, 0, 0); imagerectangle($imres, 0, 0, $w, $h, $black); // Bordo composto da una linea esterna nera imagerectangle($imres, 1, 1, $w-1, $h-1, $white); // e da una linea interna bianca } $imres = @imagecreatefromjpeg($HTTP_POST_FILES['file']['tmp_name']); $conbordo = ApplicaBordo($imres); $nome1 = "".$tot_records."-".$nome_0.""; copy($conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1); # "home/vhosts/skiforum.it/var/www/html/skiforum/".$variabuleUpdload."/"; unlink($HTTP_POST_FILES['file']['tmp_name']);
Devo riapplicare imagecreatefromjpeg anche alla $conbordo e poi copiare quella?
()
-
No, niente da fare.
Non so più come fare per copiare la immagine coi bordini, rinominandola, nella cartella voluta
-
Per salvare devi usare la [url=http://it.php.net/manual/it/function.imagejpeg.php]imagejpeg.
Cmq il bordo (anche doppio) lo puoi fare benissimo con i CSS.
-
Quindi devo modificare il mio codice in questo modo:
$imres = @imagecreatefromjpeg($HTTP_POST_FILES['file']['tmp_name']); $conbordo = ApplicaBordo($imres); $conbordo2 = imagejpeg ($conbordo,'',90); $nome1 = "".$tot_records."-".$nome_0.""; copy($conbordo2,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1);
Adesso anche $conbordo2 è un file immagine mentre prima non so che era.
Come qualità dell'immagine quanto conviene mettere? 90 è sufficiente e senza creare grossi files?Una volta copiato $conbordo2 lo devo "distruggere" o si distrugge automaticamente?
Lo provo subito.
Assolutamente niente. Non ci riesco. Sono ripassato a due errori
-
imagejpeg ha nel secondo parametro il nome del file da creare, quindi devi mettere il nome del file lì e NON fare la copy.
Prova e segnala eventuali errori...
-
@margheritebianche said:
imagejpeg ha nel secondo parametro il nome del file da creare, quindi devi mettere il nome del file lì e NON fare la copy.
Prova e segnala eventuali errori...Mi sono letto le funzioni ed ho visto che per fare ciò devo ricreare una jpeg e questo mi porta inevitabilemente ad una perdita di qualità della foto oppure alla creazione di grossissimi file (se metto qualità 100). Questo ho valutato non essere compatibile con le mie esigenze e con lo spazio web.Il vantaggio "estetico" del bordino e poi della scrittina (sarei passato a quella poi) non è compatibile con la perdita di qualità o con la creazione di files grossi.
Già che ci sono, è allora possibile coi css fare i bordini "bicolore" ovvero 1 px esterno nero ed 1 px interno bianco? Apro nuova discussione o continuiamo qui?
Grazie infinite per l'aiuto, spero la discussione possa essere utile lo stesso.
-
Onestamente so che si può fare ma i CSS non li conosco bene ma magari basta prendere spunto da qualcosa già fatto, io ho visto qualcosa simile a quello che ti potrebbe servire in [url=http://www.huddletogether.com/projects/lightbox/]lightbox , c'è sia il bordino sia la scritta soto...
Tieni conto che le GD hanno anche limiti di memoria e quindi sicuramente quella dei CSS é la soluzione migliore!