0

我正在尝试将 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)

4

1 回答 1

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);
于 2013-05-13T18:31:11.463 回答