在PHP中将黑色更改为透明

时间:2013-05-13 18:22:42

标签: php image-processing

我正在尝试用透明背景替换gif / jpeg文件中的黑色背景,并且因为通过PhotoShop逐个手动执行此操作非常累人,我想到尝试使用PHP。这是我正在使用的代码,但它不起作用。

为什么?

$image = imagecreatefromgif( 'items/item_spear06.gif' );
imagealphablending($image, true);
$transparentcolour = imagecolorallocate($image, 0,0,0);
imagecolortransparent($image, $transparentcolour);

我得到的图像与上一次以png格式显示的图像相同。


更新

$image = imagecreatefromgif( 'items/sword/iv_sword_refined19.gif' );

//get pixel data
$rgb = imagecolorat($image, 10, 10);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;

$index = imagecolorexact($image, $r, $g, $b); 
if ($index === -1) {
    $index = imagecolorallocate($image, $r, $g, $b);
}
imagecolortransparent($image, $index);

var_dump($r, $g, $b);

// Save the image
imagepng($image, 'imagecolortransparent.png');
imagedestroy($image);

现在var_dump返回int(0) int(0) int(0),应该是int(4) int(2) int(4)

1 个答案:

答案 0 :(得分:0)

我在这里突发奇想,但我猜你在这里选择的颜色(黑色)已经存在于调色板中。因此,我们所做的是尝试在调色板中找到该颜色并将其设置为透明,如果它不存在,那么我们可以使用imagecolorallocate

$image = imagecreatefromgif( 'items/item_spear06.gif' );
$index = imagecolorexact($image, 0, 0, 0); 
if ($index === -1) {
    $index = imagecolorallocate($image, 0, 0, 0);
}
imagecolortransparent($image, $index);

获取左上角像素颜色

$index = imagecolorat($image, 0, 0);
$rgb = imagecolorsforindex($image, $index);