我试图用水印文字创建图像,我希望它在图像上居中。我想要水印的文字可以是从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 –