我試圖用水印文字創建圖像,我希望它在圖像上居中。我想要水印的文字可以是從5個字符到15個字符的任意位置,因此我無法將文字的最終大小放在每張圖片上。當文字大小未知時,圖像中心水印文字
這是我用它來創建水印圖像
function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) {
list($width, $height) = getimagesize($SourceFile);
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($SourceFile);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
$black = imagecolorallocate($image_p, 0, 0, 0);
$font = '../fonts/proxima-nova-light.otf';
$font_size = 100;
imagettftext($image_p, $font_size, 0, 303, 190, $black, $font, $WaterMarkText);
if ($DestinationFile<>'') {
imagejpeg ($image_p, $DestinationFile, 100);
} else {
header('Content-Type: image/jpeg');
imagejpeg($image_p, null, 100);
};
imagedestroy($image);
imagedestroy($image_p);
};
這確實對一些文本的出色的工作,但是當我嘗試在較長的文本,它看起來糟糕的代碼。
我想 - 以某種方式 - 計算文本的最佳大小,並從那裏選擇大小,x和y。
任何想法?
使用等寬字體,然後您知道每個字符的寬度,然後您可以根據字符串的長度向左或向右移動。 –
使用['imagettfbbox()'](http://us1.php.net/manual/en/function.imagettfbbox.php)獲取渲染文本邊界框的尺寸,然後通過一些簡單的數學運算可以讓它居中。 – Sammitch
酷...不知道那個功能@Sammitch –