2013-01-31 83 views
3

我打算使用php gd旋轉透明顏色的圖像。但是,旋轉後,圖像中的透明顏色不再透明,背景也不透明。這是我的代碼。使用透明顏色旋轉圖像

$im = imagecreatefromgif('/images/80-2.gif'); 
$rotate = imagerotate($im,30,imagecolorallocatealpha($im, 0, 0, 0, 127)); 
imagegif($rotate,'/images/rotate.gif'); 
imagedestroy($im); 
imagedestroy($rotate); 

有沒有人可以幫助我使它工作?謝謝。

+0

似乎是一個老問題了,這裏是一個工作 - 周圍:http://www.sitepoint.com/forums/showthread.php?177162-imagerotate-and-alpha-transparency –

+0

感謝您的答覆,但代碼不適合我。我想知道爲什麼我在輪換之後失去了所有的透明度。 – CharlesDou

回答

3

保持透明度在您的圖片,你需要使用兩個設置,可以通過調用這些功能後,你的權利進行克里特GD資源

imagealphablending($im, false); 
imagesavealpha($im, true); 
+0

我不知道你的代碼爲什麼不適合我。當我創建原始圖像時,我使用imagecolortransparent()方法將紅色轉換爲transprent顏色。但旋轉後,透明顏色變回紅色。爲什麼會發生這種情況?謝謝。 – CharlesDou

+0

所以有更多的步驟不僅僅是這個樣本中的步驟;也許你應該嘗試這兩個圖像(我想你保存圖像爲80-2.gif和處理它再次或類似的東西)..你應該看到透明度丟失的地方..我認爲這些電話應該是在創建gd資源後立即創建 – mishu

0

工作,各地通過alex.michel提出不用gif爲我工作:背景是透明的,但不是我原來gif的alpha。它看起來像圖形紙藍色。

imagesavealpha()設置標誌嘗試保存完整的alpha通道 信息(而不是單幅: 關於祕術的解決方案,它不會爲GIF格式(從php.net手動報價)工作顏色透明度)當保存PNG 圖像。

對於PNG我用這個,它的偉大工程:

$source = imagecreatefrompng($image); 
    imagealphablending($source, false); 
    imagesavealpha($source, true); 
    $rotated = imagerotate($source, $angle, imageColorAllocateAlpha($source, 0, 0, 0, 127)); 
    imagealphablending($rotated, false); 
    imagesavealpha($rotated, true); 
    imagepng($rotated, $image); 

我仍然在尋找的東西的GIF工作...