2012-09-10 53 views
2

我需要一些關於PHP GD的幫助。這是我的一段代碼。imagepng和imagegif

header("Content-type: image/gif"); 

    $image = imagecreatetruecolor(550, 20); 
    imagealphablending($image, false); 

    $col=imagecolorallocatealpha($image,255,255,255,127); 
    $black = imagecolorallocate($image, 0, 0, 0); 

    imagefilledrectangle($image,0,0,550,20,$col); 
    imagealphablending($image, true); 

    $font_path = 'font/arial.ttf'; 
    imagettftext($image, 9, 0, 16, 13, $black, $font_path, $lastlisten); 
    imagesavealpha($image, true); 

    imagepng($image); 

問題是當我使用imagepng時,它可以像這樣顯示png就好。 enter image description here

但是,如果我使用imagegif來代替它,它會變成這樣。 enter image description here

我曾嘗試使用gif和png的不同標頭。 imagegif的結果仍然相同。 問題是我如何才能正確顯示GIF版本?謝謝你

+0

Gif不支持透明度,僅限於256色。除非你正在分配所需的反鋸齒文本創建的所有可能的灰度陰影,否則你會得到像這樣的塊結果。 –

+0

你的意思是像素點分配嗎?手動? – Joseph

回答

1

第一個問題:你的角色很醜陋:那是因爲你需要在使用imagecreatetruecolor時用較少的顏色設置調色板。

$image = imagecreatetruecolor(550, 20); 
imagetruecolortopalette($image, true, 256); 

應該解決這個問題。

第二個問題:沒有透明度。

正如你可以看到PHP manual

imagesavealpha()設置標誌嘗試保存PNG 圖像時保存完整的alpha通道 信息(而不是單一透明色)。

此功能不適用於GIF文件。

您可以使用imagecolortransparent來代替,但這不會是完美的,因爲字體具有抗鋸齒功能以使邊框更甜美。

這裏是我的代碼:

<?php 

$lastlisten = "test test test test test test"; 

error_reporting(E_ALL); 
header("Content-type: image/gif"); 

$image = imagecreatetruecolor(550, 20); 
imagetruecolortopalette($image, true, 256); 

$transparent=imagecolorallocatealpha($image,255,255,255,127); 
imagecolortransparent($image, $transparent); 
imagefilledrectangle($image,0,0,550,20,$transparent); 

$black = imagecolorallocate($image, 0, 0, 0); 
$font_path = dirname(__FILE__) . '/font.ttf'; 
imagettftext($image, 9, 0, 16, 13, $black, $font_path, $lastlisten); 

imagegif($image); 

結果here

希望這有助於。

2

GIF圖像支持最多256種顏色。最重要的是,它只支持索引透明度:像素可以是100%不透明或100%透明。

另一方面,PNG支持真實(數百萬)的彩色圖像並支持alpha通道透明度。這意味着一個像素可以是100%不透明,100%透明或者其中之間的任何東西。

您提到的PNG圖像可能有其邊緣部分透明,因此瀏覽器可以輕鬆地將這些像素與背景顏色混合,從而獲得平滑的效果。 PNG是一個更好的選擇。

+0

感謝您的精確度。 –