0

I have an PNG which I want to add an transparency.

How can I do this? I have no idea.

My initial situation is the following:

  1. User uploads an JPEG File.
  2. I create an png image by using the following code

    $image = imagecreatefromjpeg( '546654465456456_background_main.jpg' );
    imagealphablending($image, true);
    
    $bottom = imagecreatetruecolor(1280,720);
    imagecopyresampled($bottom,$image,0,0,0,0,1280,720,1280,720);
    imagealphablending($bottom, true);
    imagesavealpha($bottom,true);
    
    imagepng( $bottom, 'trans.png', 1 );
  3. Now I want to add an 50% transparency to the image. <--- here is the problem

Best Regards Michael Gohl

mico
  • 12,730
  • 12
  • 59
  • 99

1 Answers1

0

try this

<?php
function filter_opacity( &$img, $opacity ) //params: image resource id, opacity in percentage (eg. 80)
        {
            if( !isset( $opacity ) )
                { return false; }
            $opacity /= 100;

            //get image width and height
            $w = imagesx( $img );
            $h = imagesy( $img );

            //turn alpha blending off
            imagealphablending( $img, false );

            //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( $img, $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( $img, $x, $y );
                            $alpha = ( $colorxy >> 24 ) & 0xFF;
                            //calculate new alpha
                            if( $minalpha !== 127 )
                                { $alpha = 127 + 127 * $opacity * ( $alpha - 127 ) / ( 127 - $minalpha ); }
                            else
                                { $alpha += 127 * $opacity; }
                            //get the color index with new alpha
                            $alphacolorxy = imagecolorallocatealpha( $img, ( $colorxy >> 16 ) & 0xFF, ( $colorxy >> 8 ) & 0xFF, $colorxy & 0xFF, $alpha );
                            //set pixel with the new color + opacity
                            if( !imagesetpixel( $img, $x, $y, $alphacolorxy ) )
                                { return false; }
                        }
                }
            return true;
        }
?>

and use like this

$image = imagecreatefrompng( "img.png" );
filter_opacity( $image, 75 );
Donovan Charpin
  • 3,567
  • 22
  • 30