使用 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的主要内容,如果未能解决你的问题,请参考以下文章