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 に答える