使用PHP和imagettftext和角度时完全查看文本

时间:2012-07-20 17:44:27

标签: php gd

出于某种原因,当我以一定角度创建文本时,PHP的imagettftext会创建一个有趣的文本。

源代码下方。我无法发布图片,因为我没有足够的信誉点,但文字看起来像是字母的一部分被剪掉了。

帮助!!!


$text = 'My Text Is Messed Up!!!';
$font = './fonts/arial.ttf';
$font_size = 20;
$font_multiplier = 0.5;

$x=10; 
$y=190; 
$angle=45; 
$width= ($font_size * $font_multiplier) * strlen($text); 
echo $width;
$height=200; 

$size = imageTTFBBox($font_size, $angle, $font, $text);
$img = imageCreateTrueColor($width, $height);
imageSaveAlpha($img, true);
ImageAlphaBlending($img, false);

$transparentColor = imagecolorallocatealpha($img, 200, 200, 200, 127);
imagefill($img, 0, 0, $transparentColor);
$white = imagecolorallocate($img, 255, 255, 255);

// Add the text
imagettftext($img, $font_size, $angle, $x, $y, $white, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($img, 'welcome-phrase.png');
imagedestroy($img);

编辑:这是一个输出示例(我将文字颜色从白色更改为黑色,使其在白色背景上可见 - AG):

enter image description here

1 个答案:

答案 0 :(得分:1)

它似乎有一个问题,它旋转每个角色并留下一个不旋转的“掩码”,然后遮盖它周围的文字,导致你看到的问题。关闭透明图像填充时,它更加明显。

解决方法可能是旋转图像而不是文本。您将不得不修复您的坐标,但这样的事情似乎有效:

// Add the text
imagettftext($img, $font_size, 0, $x, $y, $black, $font, $text);


$img = imagerotate($img, $angle, $transparentColor);
imageSaveAlpha($img, true);
ImageAlphaBlending($img, false);

因此完整的代码将是:

$text = 'My Text Is Messed Up!!!';
$font = './fonts/arial.ttf';
$font_size = 20;
$font_multiplier = 0.5;

$x=10;
$y=190;
$angle=45.0;
$width = ($font_size * $font_multiplier) * strlen($text);
echo $width;
$height=200;

$size = imageTTFBBox($font_size, $angle, $font, $text);
$img = imageCreateTrueColor($width, $height);


$transparentColor = imagecolorallocatealpha($img, 200, 200, 200, 127);
imagefill($img, 0, 0, $transparentColor);
$white = imagecolorallocate($img, 255, 255, 255);

// Add the text
imagettftext($img, $font_size, 0, $x, $y, $white, $font, $text);


$img = imagerotate($img, $angle, $transparentColor);
imageSaveAlpha($img, true);
ImageAlphaBlending($img, false);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($img, 'welcome-phrase.png');
imagedestroy($img);

我将imageSaveAlpha和ImageAlphaBlending移动到底部,以便在旋转发生后处理所有这些。这不是最好的解决方案,但通过一些调整可以提供正确的结果。