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

    Applicare trasparenza a png

    Ho bisogno di applicare una trasparenza ad un'intera immagine png.
    Purtroppo non posso fare un ciclo di imagecolorat/imagesetpixel perché le immagini sono molte, e la pagina andrebbe in timeout.
    C'è qualche funzione che applica la trasparenza ad un'intera png?
    Grazie.

  2. #2
    Molto dipende da cosa intendi per "applica la trasparenza ad un'intera png".

    Per quanto riguarda il timeout, puoi facilmente risolvere salvando in sessione l'elenco delle immagini e "spezzando" il processo tra varie richieste HTTP (es. tramite header location, etc.)

  3. #3
    Il problema non sarebbe il timeout, ma il fatto che impiegherebbe un'eternità a caricare .

    Per quanto riguarda la trasparenza, ho un numero elevato di immagini png che vanno copiate su un'altra immagine. Non devono essere opache al 100%, ma devono avere una semitrasparenza.

  4. #4
    imagecopymerge sarebbe perfetto se rispettasse il canale alpha, ma purtroppo fa cagare
    Ho trovato un'alternativa creata da un tizio, imagecopymerge_alpha ma non funziona con tutte le immagini!
    Alcune me le trasforma in piccoli segmenti...

  5. #5
    Ho scoperto che il problema si verifica quando cerco di inserire immagini che sono gif trasparenti convertite in png.
    La funzione che sto utilizzando è la seguente:
    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);


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 © 2024 vBulletin Solutions, Inc. All rights reserved.