我正在尝试用透明背景替换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)
答案 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);