5

画像を生成するための PHP スキルをトレーニングしています。うまくいかないことが1つだけ必要です。私が望む方法でそれが可能だとは思いませんが、別の方法があるはずです。私がすでに持っているコードはこれです:

<?php
$textSize = 10;
$text = addslashes("Wietse: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed malesuada aliquet dolor, vitae tristique lectus imperdiet nec. Pellentesque et.");
$maxWidth = 448;

//Create image
$im = imagecreate(468, 60);

// Black background and White text
$bg = imagecolorallocate($im, 0, 0, 0);
$textColor = imagecolorallocate($im, 255, 255, 255);

// Split in multiple lines
$words = explode(' ', $text);
$lines = array();
$line = "";
foreach ($words as $word) {
    $box = imagettfbbox($textSize, 0, './arial.ttf', $line . $word);
    $width = $box[4] - $box[0];
    if($width > $maxWidth) {
        $line = trim($line);
        $line .= "\n";
    }
    $line .= $word . ' ';
}

// Write the text in the image
imagettftext($im, $textSize, 0, 10, $textSize + 10, $textColor, './arial.ttf', $line); // write text to image

// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

この画像は次のようになります。

画像

正常に動作しますが、私の名前は Wietse で、Bold にする必要があります。簡単な方法でこれを行うことはできないと思いますが、可能であるべきです。Bold Arial フォントで別のフォントを追加できimagettftext()ますが、Lorum ipsum テキストは名前の横から開始し、2 行目は名前と同じ X 座標に続く必要があります。今のように。あともう一つお願いがありますが、このテキストはどんな位置でもいいので難しすぎると思います。しかし、誰かがこれを行う方法を知っていれば、彼は素晴らしいです. これは、リンク ( http://www.google.com ) に下線が引かれていることです。これ以上の情報を伝える必要はないと思います。

わざとありがとう!

4

4 に答える 4

7

ほとんどすべてのフォントで、このソリューションが機能します。

このテキストを作成している場合:

imagettftext($jpg_image, 35, 0, $x, $y, $color, $font_path, $text2);

太字にしたい場合は、これらを追加する必要があります。

imagettftext($jpg_image, 35, 0, $x, $y, $color, $font_path, $text2);
imagettftext($jpg_image, 35, 0, $x, $y+1, $color, $font_path, $text2);
imagettftext($jpg_image, 35, 0, $x, $y+2, $color, $font_path, $text2);
imagettftext($jpg_image, 35, 0, $x+1, $y, $color, $font_path, $text2);
imagettftext($jpg_image, 35, 0, $x+2, $y, $color, $font_path, $text2);
于 2016-02-01T21:32:30.057 に答える
4

名前を太字にする解決策を自分で見つけました。私はこの質問をした人なので、すべてを説明したくはありません。新しいコードと結果の画像を提供するだけです。明日、リンクに下線を引こうと思います。誰かがそれに対する答えを知っているなら、私はその答えを受け入れます。コードを機能させるために必要ではないコードをもう少し変更したことに注意してください。

コード:

<?php
$username = 'WietsedeVries';
$textSize = 10;
$text = addslashes("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed malesuada aliquet dolor, vitae tristique http://www.google.com pellentesque et.");
$maxWidth = 448;

//Create image
$im = imagecreate(468, 60);

// Black background and White text
$bg = imagecolorallocate($im, 0, 0, 0);
$textColor = imagecolorallocate($im, 255, 255, 255);

// Write Bold Username in image
$usernameTotal = '@' . $username . ':';
imagettftext($im, $textSize, 0, 10, $textSize + 10, $textColor, './arialbd.ttf', $usernameTotal);

// Create white space with the width of the username
$usernameBox = imagettfbbox($textSize, 0, './arialbd.ttf', $usernameTotal);
$usernameWidth = $usernameBox[4] - $usernameBox[0];
$whiteSpace = '';
$whiteSpaceWidth = 0;
while($whiteSpaceWidth < $usernameWidth) {
    $whiteSpace .= ' ';
    $whiteSpaceBox = imagettfbbox($textSize, 0, './arial.ttf', $whiteSpace);
    $whiteSpaceWidth = $whiteSpaceBox[4] - $whiteSpaceBox[0];
}

// Split in multiple lines
$words = explode(' ', $text);
array_unshift($words, $whiteSpace);
$lines = array();
$line = "";
foreach ($words as $word) {
    $box = imagettfbbox($textSize, 0, './arial.ttf', $line . $word);
    $width = $box[4] - $box[0];
    if($width > $maxWidth) {
        $line = trim($line);
        $line .= "\n";
    }
    $line .= $word . ' ';
}

// Write the text in the image
imagettftext($im, $textSize, 0, 10, $textSize + 10, $textColor, './arial.ttf', $whiteSpace . ' ' . $line);

// Output the image
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

これにより、次の画像が得られます。

画像

于 2012-07-13T17:43:44.330 に答える
0

最良の視覚化のために、使用し-$textColorます。これにより、テキストが見やすくなります。

于 2013-01-23T17:41:08.620 に答える