Php 如何使用imagettfbbox获得准确位置?
我想创建一个具有给定文本精确尺寸的图像,并将该文本放置到该图像上。我从imagettfbbox获得的位置值似乎并不精确,特别是对于斜体字体样式。这会导致某些字符在右侧被剪切 这是我的密码:Php 如何使用imagettfbbox获得准确位置?,php,Php,我想创建一个具有给定文本精确尺寸的图像,并将该文本放置到该图像上。我从imagettfbbox获得的位置值似乎并不精确,特别是对于斜体字体样式。这会导致某些字符在右侧被剪切 这是我的密码: <?php Header("Content-type: image/png"); $font = 'fonts/ArialItalic.ttf'; $text = "SOB"; $size = 48; $bounds = imagettfbbox($size, 0, $font, $text);
<?php
Header("Content-type: image/png");
$font = 'fonts/ArialItalic.ttf';
$text = "SOB";
$size = 48;
$bounds = imagettfbbox($size, 0, $font, $text);
$width = abs($bounds[4]-$bounds[6]);
$height = abs($bounds[7]-$bounds[1]);
$offset_y = $height;
$offset_x = $bounds[0];
$image = imagecreate($width,$height);
$background = ImageColorAllocate($image, 0, 0, 0);
$foreground = ImageColorAllocate($image, 255, 255, 255);
ImageTTFText($image, $size, 0, $offset_x, $offset_y, -$foreground, $font, $text);
imagePNG($image);
imagedestroy($image);
?>
我从中得到的是
我想要的是:
计算的宽度和高度似乎是正确的;但是,X/Y位置($offset_X和$offset_Y)不是
如何动态设置$offset_x和$offset_y,使文本完全适合不同字体、大小和样式的图像?回答我自己的问题。
这是一个很长时间的PHP错误。看见
并且仍然存在于PHP7.0.1中
可以在此处找到该错误的测试脚本:
为了让我的东西正常工作,我使用了一个来自php.net上的评论的想法
其思想是将文本绘制到一个更大的画布上,并在每个像素上进行绘制,以从每一侧(顶部、右侧、底部、左侧)找到精确的位置。这是相当缓慢,特别是在较大的图像,但它的作品为我
如果有人有其他更快或更优雅的想法,我很有兴趣阅读 在github上有一个帮助您精确匹配文本的
示例代码
$text_measure = new TextMeasure($text, $font_path, $size);
$measure = $text_measure->measureText();
像这样使用度量数组:
$gd_image = imagecreatetruecolor($measure['width'], $measure['height']);
imagettftext($gd_image, $size, 0, $measure['x'], $measure['y'], $red, $font_path, $text);
预览:
只是为了记录在案。这个问题在最新的PHP版本(5.6.29和PHP7.1.0)中得到了修复,可能不再需要解决。