У меня есть несколько строк кода для генерации простого изображения с заданным текстом в php. Но когда я даю ширину для изображения, текст выходит за пределы изображения. Как я могу выровнять текст внутри изображения с фиксированной шириной, но динамической высотой? Мой код приведен ниже.
header ("Content-type: image/png");
$string = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s';
$font = 4;
$width = ImageFontWidth($font) * strlen($string);
$height = ImageFontHeight($font);
$im = @imagecreate (200,500);
$background_color = imagecolorallocate ($im, 255, 255, 255); //white background
$text_color = imagecolorallocate ($im, 0, 0,0);//black text
imagestring ($im, $font, 0, 0, $string, $text_color);
imagepng ($im);
Я хочу, чтобы это изображение автоматически корректировало тексты на основе данного абзаца. Как это сделать?
Вы можете попробовать это:
(на основе вклада Гэннона в http://php.net/manual/en/function.imagestring.php)
header ("Content-type: image/png");
$string = "Lorem Ipsum is simply dummy\n text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s";
$im = make_wrapped_txt($string, 0, 4, 4, 200);
imagepng ($im);
function make_wrapped_txt($txt, $color=000000, $space=4, $font=4, $w=300) {
if (strlen($color) != 6) $color = 000000;
$int = hexdec($color);
$h = imagefontheight($font);
$fw = imagefontwidth($font);
$txt = explode("\n", wordwrap($txt, ($w / $fw), "\n"));
$lines = count($txt);
$im = imagecreate($w, (($h * $lines) + ($lines * $space)));
$bg = imagecolorallocate($im, 255, 255, 255);
$color = imagecolorallocate($im, 0xFF & ($int >> 0x10), 0xFF & ($int >> 0x8), 0xFF & $int);
$y = 0;
foreach ($txt as $text) {
$x = (($w - ($fw * strlen($text))) / 2);
imagestring($im, $font, $x, $y, $text, $color);
$y += ($h + $space);
}
return $im;
}
Дать такой результат:
Других решений пока нет …