2008-09-15 173 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