使PNG透明 - PHP

时间:2013-09-21 12:51:47

标签: php png transparency

我有一个PNG,我想添加一个透明度。

我该怎么做?我不知道。

我最初的情况如下:

  1. 用户上传JPEG文件。
  2. 我使用以下代码

    创建一个png图像
    $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. 现在我想为图片添加50%的透明度。 < ---这是问题

  4. 最诚挚的问候 Michael Gohl

1 个答案:

答案 0 :(得分:0)

试试这个

<?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;
        }
?>

并像这样使用

$image = imagecreatefrompng( "img.png" );
filter_opacity( $image, 75 );