如何在主图像上方集中并对齐文本?
此代码的结果是此图像: https://i.imgur.com/Dk5pYJM.jpg
我希望它看起来像这样: https://i.imgur.com/mED295l.jpg
但是我对移动图像和文字了解不多。
<?php
$fontname = 'verdana.ttf';
$i = 30;
$quality = 85;
function create_image($user){
global $fontname;
global $quality;
$file = md5($user[1]['text'].rand(30454, 343434)).".jpg";
//if (!file_exists($file)) {
$im = imagecreatefromjpeg("fundo.jpg");
$logo = imagecreatefromjpeg("img.jpeg");
$color['grey'] = imagecolorallocate($im, 255, 255, 255);
$y = imagesy($im) - $height - 365;
$font_size = 25;
$logo_x = imagesx($logo);
$logo_y = imagesy($logo);
foreach ($user as $value){
$x = center_text($value['text'], $font_size);
imagettftext($im, $font_size, 0, $x, $y+$i, $color["grey"], $fontname, $value['text']);
$i = $i+32;
}
imagecopymerge($im, $logo, 37, 370, 0, 0, $logo_x, $logo_y, 100);
imagejpeg($im, $file, $quality);
//}
return $file;
}
function center_text($string, $font_size) {
global $fontname;
$image_width = 720;
$dimensions = imagettfbbox($font_size, 0, $fontname, $string);
return ceil(($image_width - $dimensions[4]) / 2);
}
$user = array(
array('text'=> 'Our adge lacks gravitas. That’s whyaadasdasdasdasdsadasdasdasdas')
);
$filename = create_image($user);
?>
<img src="<?=$filename;?>" /><br/><br/>
答案 0 :(得分:0)
使用PHP的图像功能对齐图像中的文本总是有些困惑。
首先,您需要知道文本应到达的底部中心点(锚点)的x和y坐标。对于x来说,这可能是外部图像的宽度的一半,对于中心点,这是较小图像顶部的y值(减去边距值)的原因。
此后,您必须计算文本的放置位置(x和y),以使其在中心的较小图像上方(在锚点上方居中)对齐。
为此,您可以使用^
来计算如果将文本放在x = 0 y = 0的情况下边界框的坐标。然后,您可以使用这些值来计算此边界框底部中心的坐标。
sum(unlist(mget(ls(pattern = '^x\\d+$')))^2)
从我们第一个计算出的锚点中减去这些相对值,即可获得使用x111 <- 23
x112 <- 54
放置文本的坐标。
请参见http://php.net/manual/en/function.imagettfbbox.php,以了解哪个数组值是哪个坐标值。