Mer*_*ith 6 php gd image image-processing imagettftext
我一直在使用这个简单的脚本从文本生成图像:
<?php
header('Content-type: image/png');
$color = RgbfromHex($_GET['color']);
$text = urldecode($_GET['text']);
$font = 'arial.ttf';
$im = imagecreatetruecolor(400, 30);
$bg_color = imagecolorallocate($im, 255, 255, 255);
$font_color = imagecolorallocate($im, $color[0], $color[1], $color[2]);
imagefilledrectangle($im, 0, 0, 399, 29, $bg_color);
imagettftext($im, 20, 0, 10, 20, $font_color, $font, $text);
imagepng($im);
imagedestroy($im);
function RgbfromHex($hexValue) {
if(strlen(trim($hexValue))==6) {
return array(
hexdec(substr($hexValue,0,2)), // R
hexdec(substr($hexValue,2,2)), // G
hexdec(substr($hexValue,4,2)) // B
);
}
else return array(0, 0, 0);
}
?>
Run Code Online (Sandbox Code Playgroud)
我用file.php调用脚本?text = testing script&color = 000000
现在我想知道如何在同一图像中混合使用普通和粗体字体生成文本,例如 file.php?text=testing <b>script</b>&color=000000
感谢dqhendricks帮助我解决这个问题.
这是我写的一个快速脚本,仍然需要很多改进但是对于基本功能它似乎工作得很好:
<?php
header('Content-type: image/png');
$color = RgbfromHex($_GET['color']);
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$tmp = $_GET['text'];
$words = explode(" ", $tmp);
$x = array(0,0,10); // DUMMY ARRAY WITH X POSITION FOR FIRST WORD
$addSpace = 0;
foreach($words as $word)
{
if($addSpace) $word = " ".$word; // IF WORD IS NOT THE FIRST ONE, THEN ADD SPACE
if(stristr($word, "<b>"))
{
$font = 'arialbd.ttf'; // BOLD FONT
$x = imagettftext($im, 20, 0, $x[2], 20, imagecolorallocate($im, $color[0], $color[1], $color[2]), $font, str_replace(array("<b>","</b>"), "", $word));
}
else
{
$font = 'arial.ttf'; // NORMAL FONT
$x = imagettftext($im, 20, 0, $x[2], 20, imagecolorallocate($im, $color[0], $color[1], $color[2]), $font, $word);
}
$addSpace = 1;
}
imagepng($im);
imagedestroy($im);
function RgbfromHex($hexValue) {
if(strlen(trim($hexValue))==6) {
return array(
hexdec(substr($hexValue,0,2)), // R
hexdec(substr($hexValue,2,2)), // G
hexdec(substr($hexValue,4,2)) // B
);
}
else return array(0, 0, 0);
}
?>
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于"加粗"由空格分隔的单个单词,而不能用于粗体化单词的一部分.
用脚本调用脚本 file.php?text=testing+<b>script</b>&color=000000
您将需要加载一个 arial-bold 字体文件,并执行两次单独的 imagettftext() 调用,一次调用您要使用的每种字体。至于解析字符串以找出哪些部分要加粗,以及应该在哪里打印文本的每个部分,这听起来会变得非常复杂的代码。你用这个做什么?可能有更好的解决方案来完成同样的事情。
添加
使用 imagettftext() 函数的返回值来确定下一个文本打印应从哪里开始。
来自文档:
返回一个包含 8 个元素的数组,代表构成文本边界框的四个点。点的顺序是左下、右下、右上、左上。无论角度如何,这些点都是相对于文本的,因此“左上角”意味着当您水平查看文本时位于左上角。出错时返回 FALSE。
| 归档时间: |
|
| 查看次数: |
9849 次 |
| 最近记录: |