Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4

    GIF transparency con GD

    Ho un set di immagini (circa 850), tutte con lo stesso sfondo bianco, da rendere trasparente; sto provandoci con GD, dopo aver scoperto (bug confermato da Adobe) che Photoshop non rispetta la trasparenza nelle azioni batch (automatizza... etc).

    leggendo qua e là, a parte il loop su tutte le immagini contenute in un folder, la cosa si dovrebbe ridurre a:

    Codice PHP:
    $im imagecreatefromgif("beachball1.gif");
    $white imagecolorallocate($im255255255);  
    imagecolortransparent($im,$white);  
    header('Content-type: image/gif'); 
    imagegif($im,'newBeachB.gif'); 
    imagedestroy($im); 
    che fallisce (gif identica all'originale).
    Un altro approccio tentato:

    Codice PHP:
    $src imagecreatefromgif("beachball1.gif"); 
    $dest imagecreatetruecolor(190190);   
    $white imagecolorallocatealpha($dest255255255,127); 
    imagecolortransparent($dest$white);
    imagecopy($dest$src0000190190);  
    echo 
    "done!";  
    header('Content-Type: image/gif'); 
    imagegif($dest,'copiedOne.gif'); 
     
    imagedestroy($dest); 
    imagedestroy($src); 
    stessi risultati. Credo il problema stia nell'iniziale imagecreatefromgif, tutte le combinazioni possibili utilizzando imagecolorallocatealpha, imagecolorDeallocate etc sembrano dare gli stessi risultati...


    ciao!

  2. #2
    Sei sicuro che il biano sia davvero bianco (RGB: 255, 255, 255)?
    Se utilizzi http://www.php.net/imagecolorat su un pixel "bianco", che cosa ottieni?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4
    sicuro, sia perchè le immagini eran state generate così in altro ambiente (GMT - postscript),
    sia perchè ho appunto controllato con:

    Codice PHP:
    $color_index imagecolorat($im$i$j);
    $color imagecolorsforindex($im$color_index);
    print_r($color); 
    output:

    codice:
    [red] => 255 [green] => 255 [blue] => 255 [alpha] => 0
    qualcuno può provare se gli funziona su un altro server ?
    qui ho PHP 5.0.5, GD version: "2.0 or higher"

    allego una delle immagini da processare...
    Immagini allegate Immagini allegate

  4. #4
    E' un problema di palette. Prova questo codice:

    Codice PHP:
    <?php 
    $im 
    imagecreatefromgif("beachball1.gif");
    $white imagecolorexact($im255255255);
    imagecolortransparent($im$white);
    imagegif($im'newBeachB.gif');
    imagedestroy($im);
    ?>

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    4
    questa funziona!

    Quindi il problema sta nella fase 'imagecolorallocate()' che fa riferimento alla paletta pre-esistente nell'immagine originale.

    I docs GD su php.net non danno alcun riferimento su queste questioni...


    Grazie **3 !


    ciao

  6. #6
    imagecolorallocate() alloca un nuovo colore, che poi puoi utilizzare come colore trasparente in una immagine che vai a creare.

    Ma se devi rendere trasparente una immagine (con palette) pre-esistente, devi indicargli l'indice del colore pre-esistente, altrimenti la trasparenza non verrà applicata ai pixel "bianchi" ma solo ai pixel con l'indice restituito da imagecolorallocate().

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.