1

我需要翻转图像,使角色朝向正确的方向。正如他们所说,这需要“即时”完成。

我遇到的问题是,对于 Gif 图像,我似乎失去了透明度。(背景变白)

下面是代码:(或者有人可以给我一个很好的例子)

$img = imagecreatefromgif("./unit.gif");

$size_x = imagesx($img);
$size_y = imagesy($img);

$temp = imagecreatetruecolor($size_x, $size_y);

imagecolortransparent($img, imagecolorallocate($img, 0, 0, 0));
imagealphablending($img, false);
imagesavealpha($img, true);

$x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);

if ($x) {
    $img = $temp;
}
else {
    die("Unable to flip image");
}

header("Content-type: image/gif");
imagegif($img);
imagedestroy($img);
4

3 回答 3

2

这不应该:

imagecolortransparent($img, imagecolorallocate($img, 0, 0, 0));
imagealphablending($img, false);
imagesavealpha($img, true);

...是这样的:

imagecolortransparent($temp, imagecolorallocate($img, 0, 0, 0));
imagealphablending($temp, false);
imagesavealpha($temp, true);

请注意,您应该为您创建的 $temp 图像调用这些函数,而不是源图像。

于 2008-09-15T20:25:24.170 回答
2

最终结果:

$size_x = imagesx($img);
$size_y = imagesy($img);

$temp = imagecreatetruecolor($size_x, $size_y);

imagecolortransparent($temp, imagecolorallocate($temp, 0, 0, 0));
imagealphablending($temp, false);
imagesavealpha($temp, true);
$x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
if ($x) {
    $img = $temp;
}
else {
    die("Unable to flip image");
}

header("Content-type: image/gif");
imagegif($img);
imagedestroy($img);
于 2008-09-15T20:45:40.223 回答
1

如果你能保证 ImageMagick 的存在,你可以使用他们的mogrify -flop命令。它保留了透明度。

于 2008-09-15T20:23:44.800 回答