2009-12-07 54 views
0

我有一個1像素高,760像素寬的圖像,我用它作爲重複的垂直背景圖像。此圖像的右側填充有專色(圖像的剩餘左側爲白色)。使用PHP imagecreatefromgif()修改760x1像素gif圖像的右側150像素

在我的基於CSS的佈局中,此背景圖像的目的是它提供側邊欄背景顏色一直沿着頁面運行的幻覺(容易做表格,但沒有太多的CSS定位) 。

我需要做的是想出一個方法來提供一個PHP腳本(background-image.php),它包含imagecreatefromgif函數,一個十六進制數,並使用它來重新繪製圖像的專色以匹配傳入的專色並將結果圖像保存到服務器上,覆蓋默認值。

理想情況下,我不想在每次模板加載時都調用此函數,只有在用戶選擇更改模板顏色時才需要調用此函數。所以一旦他們這樣做,我只想修改服務器上現有的圖像,這將始終被稱爲「sidebar_bg.gif」

任何想法如何做到這一點非常感謝。

回答

2

像這樣的東西可以做到這一點:

$token = md5(serialize(array($red, $green, $blue))); 

if (!file_exists('cachedir/'.$token.'.gif')) 
{ 
    $img = imagecreatefromgif('origfilename.gif'); 

    $color = imagecolorallocate($img, $red, $green, $blue); 

    for ($i = $startPixel-1; $i < $endPixel; $i++) 
    { 
     imagesetpixel($img, $i, 0, $color); 
    } 

    imagegif($img, 'cachedir/'.$token.'.gif'); 
} 

serveFile($token); 

編輯:添加緩存來示例代碼

+0

要轉換,你可以使用Saulius'的方法,以它分割成這樣的RGB值的十六進制GET參數:'名單($紅,$綠色,$藍色)= hexToRGB($ _ GET [ 'hex']);' – Franz 2009-12-07 18:06:29

+0

謝謝Franz!這正是我正在尋找的。 – 2009-12-13 14:07:45

1

只是一個除了this post。您可以十六進制顏色轉換成RGB值與如下因素的功能:

function hexToRGB ($hexColor) 
{ 
    $output = array(); 
    $output['red'] = hexdec($hexColor[0].$hexColor[1]); 
    $output['green'] = hexdec($hexColor[2].$hexColor[3]); 
    $output['blue'] = hexdec($hexColor[4].$hexColor[5]); 

    return $output; 
} 

例如嘗試:

var_dump(hexToRGB("FFFFFF")); 
+0

謝謝。好的。 – Franz 2009-12-07 18:05:07

+0

夥計們,謝謝你對此的快速投入。我能夠創建我的「origfilename.gif」的副本,但我還沒有實際將專色區域更改爲十六進制傳遞。我打算玩一下。 我看到的另一件事是,我得到一個未定義的函數serveFile() 任何想法呢?我在wordpress中使用localhost 2.6.8 – 2009-12-07 20:16:45

+0

嗯,我認爲它不應該被定義。您應該用現在顯示文件(服務文件)的方式替換它。 – 2009-12-07 21:24:02