• Bannato User Attivo

    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.


  • User Attivo

    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)


  • Bannato User Attivo

    @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.


  • Bannato User Attivo

    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? :mmm: ()


  • Bannato User Attivo

    No, niente da fare.
    Non so più come fare per copiare la immagine coi bordini, rinominandola, nella cartella voluta :arrabbiato:


  • User Attivo

    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.


  • Bannato User Attivo

    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 :arrabbiato:


  • User Attivo

    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...


  • Bannato User Attivo

    @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.


  • User Attivo

    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!