1

出于某种原因,当我以某个角度创建文本时,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):

在此处输入图像描述

4

1 回答 1

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 移到底部,以便在旋转发生后处理所有这些问题。这不是最好的解决方案,但通过一些调整将提供正确的结果。

于 2012-07-26T21:21:18.050 回答