使用 PHP GD 转换为 alpha

Posted

技术标签:

【中文标题】使用 PHP GD 转换为 alpha【英文标题】:Convert to alpha using PHP GD 【发布时间】:2013-05-02 23:11:35 【问题描述】:

我正在尝试通过使用转换为 Alpha 过滤器(请参阅 http://erskinedesign.com/blog/fireworks-tips-convert-alpha/)来实现与 Fireworks 所做的类似的事情。这可能只使用 php gd 函数吗?

我的代码如下:

$img = imagecreatefromstring(file_get_contents('...'));

imagealphablending($img, true);
$transparentcolour = imagecolorallocate($img, 255,255,255);
imagecolortransparent($img, $transparentcolour);
imagefilter($img, IMG_FILTER_GRAYSCALE);

$w = imagesx($img);
$h = imagesy($img);

for ($x=0; $x<$w; $x++)

    for ($y=0; $y<$h; $y++)
    
        $color = imagecolorsforindex($img, imagecolorat($img, $x, $y));

        if ($color['alpha'] == 0)
            continue;
    

imagepng($img);
exit;

我的想法是转换为灰度,测量一个像素有多“暗”,然后将其转换为黑色 alpha,但我自己似乎很困惑。

【问题讨论】:

这是您所说功能的全部代码吗?我在这里没有看到任何 imagepng()。 imagepng() 就在 for 循环之后。 【参考方案1】:

奇怪的是,当我发现你的问题时,我也在寻找同样的东西。最终构建了这个函数,我认为它的工作方式不如你想要的那样。

function n2_image_make_alpha( $im , $percentage )

    imagefilter( $im , IMG_FILTER_GRAYSCALE );

    $width = imagesx( $im );
    $height = imagesy( $im );

    imagealphablending( $im , false );
    imagesavealpha( $im , true );

    $newim = imagecreatetruecolor( $width , $height );
    imagealphablending( $newim , false );
    imagesavealpha( $newim , true );


    //Loop through pixels
    for ( $x = 0 ; $x < $width ; $x++ )
    
        for ( $y = 0 ; $y < $height ; $y++ )
        
            //Get the color of the pixel
            $color = imagecolorat( $im , $x , $y );
            //Get the rgba of the color
            $rgba = imagecolorsforindex( $im , $color );
            $alpha = $rgba['alpha'];
            if ( $alpha < 127 )
            
                $base_alpha = 127 - $alpha; //100% of the difference between completely transparent and the current alpha
                $percentage_to_increase_alpha = intVal( $percentage * $base_alpha / 100 );
                $alpha = $alpha + $percentage_to_increase_alpha;
            
            $new_color = imagecolorallocatealpha ( $newim , $rgba['red'] , $rgba['green'] , $rgba['blue'] , $alpha );
            imagesetpixel ( $newim , $x , $y , $new_color );
        
    
    return $newim;

【讨论】:

以上是关于使用 PHP GD 转换为 alpha的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP GD 库将 webp 转换为 jpeg

PHP 将 GD 图像转换为用于验证码的 CSS 代码

php转换bmp图片格式为jpg格式

带有 GD 的 PHP 等距立方体

将 GD 图像缩放器转换为具有双三次锐化器的等效 ImageMagick

如何使用干预图像laravel将webp图像转换为jpeg或png