2008-09-15 123 views
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); 

回答

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); 

注意你应该调用这些函数为您创建的临时$形象,而不是源图像。

1

如果你能保证ImageMagick的存在,你可以用自己的mogrify -flop命令它保留透明度

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); 
+0

感谢张贴更新的代码。这对我有帮助 – JakeParis 2012-03-30 17:00:15