我正在處理用戶上傳的圖像上的水印腳本。由於每個用戶都想在自己的照片上擁有自己的用戶名,因此我決定首先製作一個帶有用戶名的透明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);
}
?>
我敢肯定,我錯過了什麼,但我想不出什麼。
我的第二個問題是,我無法弄清楚如何獲得文本到中心,擺脫文本週圍的白色空間。
請下載圖像明白我的意思。
在此先感謝您的幫助。
你確定你要刪除不正確的形象呢?我發現腳本只是在現有圖像上退出,而不正確的圖像可能會在您的緩存中。對於居中,您將需要使用imagettfbbox獲取文本的尺寸並使用這些值來確定放置位置。(圖像的1/2寬度) - (文本的1/2寬度)=文本的起始位置在圖像上。 – FatherStorm 2010-11-03 20:30:33