2012-07-20 84 views
1

时完全看文本PHP的imagettftext创建一个有趣的看文本,当我创建一个角度的文本。由于某种原因,使用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

+2

我附上一个示例输出给你。必须同意你的看法:这真的很奇怪。 – 2012-07-20 17:58:32

+0

呃。任何机会你可以使用ImageMagick? – 2012-07-21 19:33:20

+0

确实。你尝试过其他字体吗? – 2012-07-21 19:41:04

回答

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至底部照顾所有的在旋转发生之后。这不是最好的解决方案,但一些调整将提供正确的结果。