Visualizzazione risultati 1 fino 9 di 9

Discussione: [GD] Sovrapposizione immagini (trasparenza)

  1. #1
    poske non è connesso Altervistiano Junior
    Data registrazione
    06-02-2005
    Messaggi
    620

    Question [GD] Sovrapposizione immagini (trasparenza)

    Salve a tutti!
    premetto che per quanto riguarda le GD sono un perfetto ignorante [(ma anche per altre cose :D)]. Bene, detto questo vi spiego di cosa avrei bisogno...

    Devo sovrapporre 2 immagini... la cosa importante è che l'immagine che si sovrapporrà alla prima è una gif con trasparenza... Ho cercato e ricercato su google e qui sul forum ma non ho trovato molto...

    Qualcuno potrebbe suggerirmi qualche riga di codice per aprirmi la strada?

    Vi ringrazio!!!

    CIAO! :D

  2. #2
    Guest

    Predefinito

    Prova con

    Codice PHP:
    imagecolortransparent($immagine,$colore_trasparente)
    Ciao!

  3. #3
    poske non è connesso Altervistiano Junior
    Data registrazione
    06-02-2005
    Messaggi
    620

    Predefinito

    Citazione Originalmente inviato da allo
    Prova con

    Codice PHP:
    imagecolortransparent($immagine,$colore_trasparente)
    Ti ringrazio! purtroppo però questa funzione che mi suggerisci prende il colore che hai specificato da un'immagine e lo rende trasparente... a me invece servirebbe una funzione che riconoscesse la trasparenza di un'immagine automaticamente... anche perché altrimenti prima di far lavorare lo script dovrei applicare tutti gli sfondi dello stesso colore a qualsiasi immagine... mentre nelle gif la trasparenza non ha colore da modificare.

    Non so se mi sono spiegato.

    Altre funzioni?

    Ciao! :D

  4. #4
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Sinceramente non capisco dove sta il problema..
    la trasparenza di una gif viene riconosciuta automaticamente..
    evidentemente hai usato la funzione SBAGLIATA (tipo imagecopyresampled o simile)
    per unirla all'altra immagine, come si dice qui:
    http://forum.altervista.org/showthre...ht=trasparente

    Mi è bastato cercare sul forum la semplice parola "trasparente" ristretto a quest'area (ovviamente solo qui si parla di GD) per trovare sia il topic linkato sia anche molti altri thread.

    La trasparenza viene soppiantata dal reale colore (opaco) quando si tenta di fare un RESIZE (ricalcolare le dimensioni, anche non accorgendosene) sull'immagine, in una fase dove non va fatto.

    Ti faccio un esempio praticissimo:
    hai visto la mia firma qui sotto? è l'unione di TRE immagini:
    1) lo schema sudoku in una png 8bit, generato giornalmente tramite un altro script
    2) la foto (jpg) di sfondo del giorno (a cui viene applicato il resample per rimpicciolirla)
    3) una immagine png 24bit che oltre ad avere una semplice trasparenza ha tutta una gamma di colori di opacità variabile (alpha channel) quindi una trasparenza "sfumata", vedi l'ombra?
    Se avessi fatto un resize o resample a quest'ultima col cavolo che vedevo lo sfondo e gli effetti di ombra sfumata

    Se non ti aiuta affatto questo allora meglio che posti il codice così inquadramo meglio la situescion
    Ultima modifica di heracleum : 09-01-2006 alle ore 00.28.12
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  5. #5
    poske non è connesso Altervistiano Junior
    Data registrazione
    06-02-2005
    Messaggi
    620

    Predefinito

    Ciao Heracleum, molto probabilmente hai centrato il mio problema...
    Anche se nel mio caso posso dire che dopo parecchie ricerche e prove ho risolto col seguente codice:
    Codice PHP:
    <?php
    $sfondo
    =imagecreatefromjpeg("sfondo.jpg");
    $insert=imagecreatefromgif("prova.gif");
    $insert_x=imagesx($insert);
    $insert_y=imagesy($insert);
    imagecopyresampled($sfondo,$insert,0,0,0,0,$insert_x,$insert_y,$insert_x,$insert_y);
    imagejpeg($sfondo);
    imagedestroy($sfondo);
    imagedestroy($insert);
    ?>
    Il codice funziona bene per quello che mi serviva... ovvero inserisce l'immagine gif sopra la jpeg di sfondo senza visualizzare nessun colore al posto della trasparenza...

    Ora però ho notato che se l'immagine gif possiede delle fumature tra il contorno dell'immagine e lo sfondo, queste rimangono bianche fino alla fine del colore sfumato... e quindi non è un bell'effetto da vedere... cosa che non succede nella tua firma per l'ombra sotto la scritta "Il sudoku di oggi"...

    Come posso modificare il mio codice per avere un effetto simile a quello ottenuto dal tuo?

    Grazie 1000!!! :D

    Ciao

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Eh te l'ho detto sopra
    lascia perdere le gif e usa le PNG 24bit
    se hai Photoshop (per dirne uno ma anche GIMP2 e altri)
    parti da un'immagine a sfondo trasparente,
    aggiungi un layer (livello) con l'immagine che vuoi, con i contorni ben tondeggianti (insomma senza l'effettaccio che dicevi su con la tua gif, che tecnicamente definirei "antialias verso un preciso colore" bianco nel tuo caso).
    Poi lasciandoli su due livelli diversi usa "salva per il web" "save for the web" una cosa simile, e scegli come formato PNG-24 o simile (24 è importante, non 8).
    E avrai l'effetto come quello.

    Sarebbe molto bello se anche IE le supportasse direttamente, ci sarebbero effettoni da brivido nei siti web e invece ancora IE6 non le supporta (si vede tutto lo sfondo bianco o altro) la solita vergogna MS!

    Comunque qui parliamo di GD, png24 applicate ad uno sfondo quindi non c'è questo problema.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    poske non è connesso Altervistiano Junior
    Data registrazione
    06-02-2005
    Messaggi
    620

    Predefinito

    Grazie ancora Heracleum sei troppo forte !

    Quindi il mio codice posso lasciarlo così com'è cambiando l'immagine gif con una png? il mio dubbio era se fosse sbagliato il codice che ho postato io per effettuare il lavoro con le png che mi avevi suggerito...


    Ciao! :D

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Non no infatti, mi ero dimenticato di rispondere puntualmente a:
    Citazione Originalmente inviato da poske
    Come posso modificare il mio codice per avere un effetto simile a quello ottenuto dal tuo?
    Appunto con un:
    il codice va bene così com'è è il formato immagine che dovresti cambiare.
    Visto che così com'è una png24 non si può utilizzare direttamente in pagina (finché IE non si sveglia e le supporta!)
    ..almeno la si frutta nelle operazioni GD di mix di più immagini.
    Questa in firma è la prima volta che le uso e devo dire che i risultati sono stra-soddisfacenti!
    Grandi png! formato sempre più da considerare (PNG = Portable Network Graphics).
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  9. #9
    poske non è connesso Altervistiano Junior
    Data registrazione
    06-02-2005
    Messaggi
    620

    Smile [Risolto][GD] Sovrapposizione immagini (trasparenza)

    Il mio codice come avevi già detto funziona ed è bastato utilizzare un'immagine PNG 24 per visualizzare una sfumatura gradevole e in trasparenza... non so come ringraziarti! 6 veramente un grande :-)

    Ciao! :D


    P.S.: anche se non è cambiato molto... sono felice di postare il codice finale... potrebbe tornare utile a qualcuno...
    Codice PHP:
    <?php
    $background
    =imagecreatefromjpeg("sfondo.jpg");
    $insert=imagecreatefrompng("IMMAGINETRASPARENTE.png");
    $insert_x=imagesx($insert);
    $insert_y=imagesy($insert);
    imagecopyresampled($background,$insert,0,0,0,0,$insert_x,$insert_y,$insert_x,$insert_y);
    imagejpeg($background);
    imagedestroy($background);
    imagedestroy($insert);
    ?>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •