Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Creare immagini PNG senza sfondo

    Salve posto questo problema xkè ho fatto qualche ricerca su internet e non ho trovato un sito che trattasse quaso argomento. Vengo subito al sodo. Tramite il mio sito ho la necessità di ricevere dall'utente immagini png senza sfondo e ridimensionarle facendole rimanere senza sfondo... il codice che ho creato è il seguente...
    Codice PHP:
    <?php
    function car_img($foto,$cod,$nome)
    {
        
    //$foto è la foto passata alla funzione
        //$cod è la directory e il codice utente
        //$nome è il nome finale della foto una volta creata
        
    list($larg,$alt,$tipo,$attr)=getimagesize($foto["tmp_name"]);
        if(
    $tipo==3)         
        { 
            if(
    $larg >300
            {
                
    $rid=$larg/$alt;
                
    $altr=300/$rid;
                
    $img_rid=imagecreatetruecolor(300,$altr);
                
    $sorg=imagecreatefrompng($foto["tmp_name"]);
                
    imagecopyresized($img_rid,$sorg,0,0,0,0,300,$altr,$larg,$alt);
            }
            else
            {
            
    $img_rid=imagecreatetruecolor($larg,$alt);
            
    $sorg=imagecreatefrompng($foto["tmp_name"]);
            
    imagecopyresized($img_rid,$sorg,0,0,0,0,$larg,$alt,$larg,$alt);
            }
            if(!
    imagepng($img_rid,"img/".$cod."/".$nome.".png")) return 0;
            else return 
    1
        }
    }
    ?>
    una volta caricata l'immagine il risultato è quello che si vede qui... ma in origine l'mmagine è senza sfondo... cè qualcosa che posso fare?
    Immagini allegate Immagini allegate
    Why so serious?????

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    mi sembra di averci già sbattuto la testa, trovi poco perchè non è supportata.
    Io dovevo fare il merge di due immagini conservando la trasparenza e avevo trovato questa funzione
    Codice PHP:

    function imagecopymerge_alpha($dst_im$src_im$dst_x$dst_y$src_x$src_y$src_w$src_h$pct){ 

        if(!isset(
    $pct)){ 
            return 
    false
        } 

        
    $pct /= 100
        
    // Get image width and height 
        
    $w imagesx$src_im ); 
        
    $h imagesy$src_im ); 
        
    // Turn alpha blending off 
        
    imagealphablending$src_imfalse ); 
        
    // Find the most opaque pixel in the image (the one with the smallest alpha value) 
        
    $minalpha 127
        for( 
    $x 0$x $w$x++ ) 
        for( 
    $y 0$y $h$y++ ){ 
            
    $alpha = ( imagecolorat$src_im$x$y ) >> 24 ) & 0xFF
            if( 
    $alpha $minalpha ){ 
                
    $minalpha $alpha
            } 
        } 
        
    //loop through image pixels and modify alpha for each 
        
    for( $x 0$x $w$x++ ){ 
            for( 
    $y 0$y $h$y++ ){ 
                
    //get current alpha value (represents the TANSPARENCY!) 
                
    $colorxy imagecolorat$src_im$x$y ); 
                
    $alpha = ( $colorxy >> 24 ) & 0xFF
                
    //calculate new alpha 
                
    if( $minalpha !== 127 ){ 
                    
    $alpha 127 127 $pct * ( $alpha 127 ) / ( 127 $minalpha ); 
                } else { 
                    
    $alpha += 127 $pct
                } 
                
    //get the color index with new alpha 
                
    $alphacolorxy imagecolorallocatealpha$src_im, ( $colorxy >> 16 ) & 0xFF, ( $colorxy >> ) & 0xFF$colorxy 0xFF$alpha ); 
                
    //set pixel with the new color + opacity 
                
    if( !imagesetpixel$src_im$x$y$alphacolorxy ) ){ 
                    return 
    false
                } 
            } 
        } 
        
    // The image copy 
        
    imagecopy($dst_im$src_im$dst_x$dst_y$src_x$src_y$src_w$src_h); 

    puoi prendere spunto.

    Prima di provare quella funzione avevo usato la funzione

    int imagecolortransparent ( resource $image [, int $color ] )

    che imposta come trasparente il colore $color nella immagine $image.

    Ma il tuo colore di sfondo deve essere ben definito ( un bel nero, per esempio ), altrimenti hai delle sbavature.


    ciao
    sergio

  3. #3
    Grazie per l'aiuto e scusa se ho risposto un pochino tardi ma è ho avuto il pc rotto... cmq l'ho provato e mi funziona. Grazie
    Why so serious?????

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.