字母 'j' 被 imagettftext 函数窃听
Letter 'j' bugged with imagettftext function
我创建了一个脚本来使用 PHP 生成头像,一切正常,但是当 j 中有字母 $data1['username']
时,这封信擦掉了前一封信的一部分。注意:我使用 calibri 粗体斜体 (Downloaded here)
这是我的代码:
$image = imagecreatefrompng("avatar.png");
$couleur = imagecolorallocate($image, 0, 0, 0);
$largeur_source = imagesx($image);
$fontfile = 'calibri.ttf';
$angle = 0;
$police = 18;
$text_size = imagettfbbox($police, $angle, $fontfile, 'Hub de '.$data2['nom']);
$text_size2 = imagettfbbox($police, $angle, $fontfile, $data1['username']);
$text_width = (($text_size[2] + $text_size[4]) / 2) - (($text_size[0] + $text_size[6]) / 2);
$text_width2 = (($text_size2[2] + $text_size2[4]) / 2) - (($text_size2[0] + $text_size2[6]) / 2);
$x = ($largeur_source - $text_width)/2;
$x2 = (176 - $text_width2)/2 + 74;
//imagestring($image, $police, $x, $y, $texte_a_ecrire, $couleur);
imagettftext($image, $police, $angle, $x2, 175, $couleur, $fontfile, $data1['username']);
imagettftext($image, $police, $angle, $x, 35, $couleur, $fontfile, 'Hub de '.$data2['nom']);
imagepng($image);
当 $data1['username'] = 'Paj46
时,字符串如下所示:
看起来你的字体没有字距对table
在这里寻找 Kerning
- 你必须计算整数不要使用
x/2
直接 round up
.. ceil()
- 如果您的图片宽度在
$largeur_source
中,请使用它!
- 使用
result[2]
或result[4]
从imagettfbbox()
计算。 (值相同)
<?php
$image = imagecreatefrompng("avatar.png");
$couleur = imagecolorallocate($image, 0, 0, 0);
$largeur_source = imagesx($image);
$fontfile = '59250___.TTF';
$angle = 0;
$police = 24;
$text_size = imagettfbbox($police, $angle, $fontfile, 'Hub de' );
$text_size2 = imagettfbbox($police, $angle, $fontfile, 'username');
$x = ceil(($largeur_source - $text_size[2]) / 2);
$x2 = ceil(($largeur_source - $text_size2[2]) / 2);
imagettftext($image, $police, $angle, $x2, 80, $couleur, $fontfile, 'username');
imagettftext($image, $police, $angle, $x, 35, $couleur, $fontfile, 'Hub de ');
imagepng($image);
我创建了一个脚本来使用 PHP 生成头像,一切正常,但是当 j 中有字母 $data1['username']
时,这封信擦掉了前一封信的一部分。注意:我使用 calibri 粗体斜体 (Downloaded here)
这是我的代码:
$image = imagecreatefrompng("avatar.png");
$couleur = imagecolorallocate($image, 0, 0, 0);
$largeur_source = imagesx($image);
$fontfile = 'calibri.ttf';
$angle = 0;
$police = 18;
$text_size = imagettfbbox($police, $angle, $fontfile, 'Hub de '.$data2['nom']);
$text_size2 = imagettfbbox($police, $angle, $fontfile, $data1['username']);
$text_width = (($text_size[2] + $text_size[4]) / 2) - (($text_size[0] + $text_size[6]) / 2);
$text_width2 = (($text_size2[2] + $text_size2[4]) / 2) - (($text_size2[0] + $text_size2[6]) / 2);
$x = ($largeur_source - $text_width)/2;
$x2 = (176 - $text_width2)/2 + 74;
//imagestring($image, $police, $x, $y, $texte_a_ecrire, $couleur);
imagettftext($image, $police, $angle, $x2, 175, $couleur, $fontfile, $data1['username']);
imagettftext($image, $police, $angle, $x, 35, $couleur, $fontfile, 'Hub de '.$data2['nom']);
imagepng($image);
当 $data1['username'] = 'Paj46
时,字符串如下所示:
看起来你的字体没有字距对table
在这里寻找 Kerning
- 你必须计算整数不要使用
x/2
直接round up
..ceil()
- 如果您的图片宽度在
$largeur_source
中,请使用它! - 使用
result[2]
或result[4]
从imagettfbbox()
计算。 (值相同)
<?php
$image = imagecreatefrompng("avatar.png");
$couleur = imagecolorallocate($image, 0, 0, 0);
$largeur_source = imagesx($image);
$fontfile = '59250___.TTF';
$angle = 0;
$police = 24;
$text_size = imagettfbbox($police, $angle, $fontfile, 'Hub de' );
$text_size2 = imagettfbbox($police, $angle, $fontfile, 'username');
$x = ceil(($largeur_source - $text_size[2]) / 2);
$x2 = ceil(($largeur_source - $text_size2[2]) / 2);
imagettftext($image, $police, $angle, $x2, 80, $couleur, $fontfile, 'username');
imagettftext($image, $police, $angle, $x, 35, $couleur, $fontfile, 'Hub de ');
imagepng($image);