2010-11-03 44 views
0

我正在處理用戶上傳的圖像上的水印腳本。由於每個用戶都想在自己的照片上擁有自己的用戶名,因此我決定首先製作一個帶有用戶名的透明PNG。之後,我使用簡單的水印技術將PNG和上傳的文件合併在一起。水印png不斷顯示當前的URL

我拿到劇本的工作,但它一直向我展現我目前的地址每次創建PNG時間。

這是迄今爲止代碼:

<?php 
    session_start(); 

    $username = $_SESSION['login']; 
    $filename = "watermarks/$username.png"; 

    if (file_exists($filename)) { 
     exit; 
    } elseif ($filename == "undefined") { 
     exit; 
    }else{ 


    header("Content-type: image/png"); //Picture Format 
    header("Expires: Mon, 01 Jul 2003 00:00:00 GMT"); // Past date 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Consitnuously modified 
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
    header("Pragma: no-cache"); // NO CACHE 

    /*image generation code*/ 
    //create Image of size 350px x 75px 
    $bg = imagecreatetruecolor(500, 100); 

    //This will make it transparent 
    imagesavealpha($bg, true); 

    $trans_colour = imagecolorallocatealpha($bg, 0, 0, 0, 127); 
    imagefill($bg, 0, 0, $trans_colour); 

    //Text to be written 
    $text = $username; 

    // White text 
    $white = imagecolorallocate($bg, 255, 255, 255); 
    // Grey Text 
    $grey = imagecolorallocate($bg, 128, 128, 128); 
    // Black Text 
    $black = imagecolorallocate($bg, 0,0,0); 

    $font = 'fonts/LiberationSans.ttf'; //path to font you want to use 
    $fontsize = 20; //size of font 


    //Writes text to the image using fonts using FreeType 2 
    imagettftext($bg, $fontsize, 0, 125, 50, $black, $font, $text); 

    imagettftext($bg, $fontsize, 0, 127, 52, $white, $font, $text); 




    //Create image 
    header("Content-type: image/png"); 
    //imagepng($bg); 

    $save = $filename; 
    imagepng($bg, $save, 0, NULL); 


    //destroy image 
    imagedestroy($bg); 

    } 
    ?> 

我敢肯定,我錯過了什麼,但我想不出什麼。

我的第二個問題是,我無法弄清楚如何獲得文本到中心,擺脫文本週圍的白色空間。 alt text

請下載圖像明白我的意思。

在此先感謝您的幫助。

+0

你確定你要刪除不正確的形象呢?我發現腳本只是在現有圖像上退出,而不正確的圖像可能會在您的緩存中。對於居中,您將需要使用imagettfbbox獲取文本的尺寸並使用這些值來確定放置位置。(圖像的1/2寬度) - (文本的1/2寬度)=文本的起始位置在圖像上。 – FatherStorm 2010-11-03 20:30:33

回答

3

您不輸出圖像。大多數瀏覽器只會在標題指示圖像時顯示當前url,但不會發送數據。

注意到你如何提供一個文件名imagepng()?如果你在閱讀imagepng() PHP手冊它說,它會要麼輸出的圖像,如果沒有文件名保存到存在,將圖像保存到指定的文件名。

您需要刪除$bg之後的所有參數以輸出圖像,或者在imagedestroy($bg);之後,您需要打開輸出文件$save並重新輸出它。

像下面將流的文件到輸出:

<?php 
$fp = fopen($save, 'r'); 
while(!feof($fp)) { 
    print fread($fp, 1024); 
    ob_flush(); 
    flush(); 
} 
fclose($fp); 
+0

'imagepng($ bg,NULL)'也可以和'imagepng($ bg)'有相同的效果,所以通過使用'NULL'而不是文件名,你也可以使用其他參數(壓縮和過濾器)。 – Frxstrem 2010-11-03 20:44:20

+0

謝謝大家的幫助。我需要將圖像保存在背景中而不顯示給用戶。我想我會在畫廊頁面向他展示水印,問題就解決了。 再次感謝! – moonwalker 2010-11-03 20:48:25