+ Rispondi alla Discussione
Risultati da 1 a 11 di 11

Aggiungere bordo ad una immagine con Lib. GD

Ultimo Messaggio di margheritebianche il:
  1. #1
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862

    Aggiungere bordo ad una immagine con Lib. GD

    Ho questo scopo:
    faccio caricare una foto dal mio sito, faccio dei controlli, e poi dalla cartella temporanea la sposto sulla cartella definitiva.

    Faccio così
    Codice:
    $nome1 = "".$tot_records."-".$nome_0."";
    
    #QUI AGGIUNGO IL CODICE CHE CREA IL BORDO
    
    copy($HTTP_POST_FILES['file']['tmp_name'],"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1);
    
    unlink($HTTP_POST_FILES['file']['tmp_name']);
    Ecco vorrei che la foto prima di essere copiata dalla cartella temporanea fosse un po modificata. Mi piacerebbe per esempio aggiungere un bordo interno bianco di 2px ed uno nero di 3 px. Una volta che questa operazione è fatta si sposta la foto e si cancella quella nella cartella temporanea.

    Per fare ciò posso utilizzare le Librerie GD. Ho ricercato per la rete ed ho trovato questa pagina:
    http://php.html.it/articoli/leggi/93...i-gd-in-php/2/

    Metto il codice per il riconoscimento della versione e la pagina mi risponde:
    Codice:
    Su questo sistema è presente la versione 2 delle librerie GD.
    poi aggiungo il codice per creare la immagine di prova (copio quel codice nella stessa pagina) e accidenti, l'immagine non mi appare ed invece mi compare questo messaggio:
    Codice:
    Warning: Cannot modify header information - headers already sent by (output started at /home/vhosts/skiforum.it/var/www/html/image-gd.php:8) in /home/vhosts/skiforum.it/var/www/html/image-gd.php on line 49
    ‰PNG 
    la linea 8 è la riga <?
    la linea 49 dice: header("Content-type: image/png");

    Allora, proseguendo per passi, come faccio a risolvere questo primo problema? E' solo per la manipolazione di immagini .png? In tal caso non mi interessa i nquanto faccio caricare solo gif e jpeg.

    Grazie.
    Non ho aperto un nuovo topic ma l'ho aggiunto qui. Anzi no, ne apro uno nuovo.

  2. #2
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Allora, ho agito così:
    Codice:
    function ApplicaBordo&#40;&$imres&#41;&#123;
      $h = imagesy&#40;$imres&#41;-1;
      $w = imagesx&#40;$imres&#41;-1;
    
      $white = imagecolorallocate&#40;$imres, 255, 255, 255&#41;;
      $black = imagecolorallocate&#40;$imres, 0, 0, 0&#41;;
    
      imagerectangle&#40;$imres, 0, 0, $w, $h, $black&#41;;   // Bordo composto da una linea esterna nera
      imagerectangle&#40;$imres, 1, 1, $w-1, $h-1, $white&#41;; // e da una linea interna bianca
    &#125;
    $conbordo = ApplicaBordo&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;&#41;;
    
    $nome1 = "".$tot_records."-".$nome_0."";
    
    copy&#40;$conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1&#41;;
    
    unlink&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;&#41;;
    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
    Codice:
    Warning&#58; imagesy&#40;&#41;&#58; supplied argument is not a valid Image resource in /home/vhosts/sito.it/var/www/html/dir/upload-save.php on line 123
    
    Warning&#58; imagesx&#40;&#41;&#58; 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.

  3. #3
    User
    Data Registrazione
    Mar 2005
    Località
    Genova
    Messaggi
    411
    Alla funzione imagesx non devi passare il nome del file immagine ma un identificativo di immagine che puoi ottenere, ad esempio, con imagecreatefromjpeg (e vari altri)

  4. #4
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Citazione Originariamente Scritto da margheritebianche
    Alla funzione imagesx non devi passare il nome del file immagine ma un identificativo di immagine che puoi ottenere, ad esempio, con 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.

  5. #5
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Mi sono spariti quei messaggi ma me ne è apparso uno di nuovo

    Codice:
    Warning&#58; copy&#40;&#41;&#58; Unable to access in /home/vhosts/skiforum.it/var/www/html/skiforum/upload-save.php on line 137
    e la linea dice:
    Codice:
    copy&#40;$conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1&#41;;

    L'intero codice è il seguente:
    Codice:
    function ApplicaBordo&#40;&$imres&#41;&#123;
      $h = imagesy&#40;$imres&#41;-1;
      $w = imagesx&#40;$imres&#41;-1;
    
      $white = imagecolorallocate&#40;$imres, 255, 255, 255&#41;;
      $black = imagecolorallocate&#40;$imres, 0, 0, 0&#41;;
    
      imagerectangle&#40;$imres, 0, 0, $w, $h, $black&#41;;   // Bordo composto da una linea esterna nera
      imagerectangle&#40;$imres, 1, 1, $w-1, $h-1, $white&#41;; // e da una linea interna bianca
    &#125;
    $imres = @imagecreatefromjpeg&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;&#41;;
    $conbordo = ApplicaBordo&#40;$imres&#41;;
    
    $nome1 = "".$tot_records."-".$nome_0."";
    
    copy&#40;$conbordo,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1&#41;;
    # "home/vhosts/skiforum.it/var/www/html/skiforum/".$variabuleUpdload."/";
    unlink&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;&#41;;
    Devo riapplicare imagecreatefromjpeg anche alla $conbordo e poi copiare quella? ()

  6. #6
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    No, niente da fare.
    Non so più come fare per copiare la immagine coi bordini, rinominandola, nella cartella voluta

  7. #7
    User
    Data Registrazione
    Mar 2005
    Località
    Genova
    Messaggi
    411
    Per salvare devi usare la imagejpeg.
    Cmq il bordo (anche doppio) lo puoi fare benissimo con i CSS.

  8. #8
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Quindi devo modificare il mio codice in questo modo:
    Codice:
    $imres = @imagecreatefromjpeg&#40;$HTTP_POST_FILES&#91;'file'&#93;&#91;'tmp_name'&#93;&#41;;
    $conbordo = ApplicaBordo&#40;$imres&#41;;
    $conbordo2 = imagejpeg &#40;$conbordo,'',90&#41;;
    $nome1 = "".$tot_records."-".$nome_0."";
    
    copy&#40;$conbordo2,"/home/vhosts/skiforum.it/var/www/html/skiforum/upload/".$categoria_foto."/".$nome1&#41;;
    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

  9. #9
    User
    Data Registrazione
    Mar 2005
    Località
    Genova
    Messaggi
    411
    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...

  10. #10
    Banned L'avatar di fabioski
    Data Registrazione
    May 2005
    Messaggi
    862
    Citazione Originariamente Scritto da margheritebianche
    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.

  11. #11
    User
    Data Registrazione
    Mar 2005
    Località
    Genova
    Messaggi
    411
    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 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!

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.