PHP 和 GD 库为文本添加 1px 实心边框?我得到了一个像点一样的边框
Posted
技术标签:
【中文标题】PHP 和 GD 库为文本添加 1px 实心边框?我得到了一个像点一样的边框【英文标题】:PHP and GD library add 1px solid border to a text? I'm getting a border like dots 【发布时间】:2015-07-16 11:35:06 【问题描述】:这是我获取文本的方式:
我想给文本添加一个实心边框,即使边框是纯黑色的......
这是我的代码:
<?php
$text = ($_GET['txt'] ? $_GET['txt'] : '?');
$text = strtoupper($text[0]).substr($text,1,strlen($text));
$size = ($_GET['size'] ? $_GET['size'] : 15);
$sizex = 120;
$sizey = 28;
$x = 4;
$y = 20;
$color = ($_GET['color'] ? $_GET['color'] : 'efcfa4');
$red = (int)hexdec(substr($color,0,2));
$green = (int)hexdec(substr($color,2,2));
$blue = (int)hexdec(substr($color,4,2));
$img = imagecreatetruecolor($sizex,$sizey);
ImageColorTransparent($img, ImageColorAllocate($img,0,0,0));
imagettftext($img, $size, 0, $x, $y, ImageColorAllocate($img,$red,$green,$blue), 'martel.ttf', $text);
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
用文本数据生成的图片取自另一页的这一行:
<img src="pages/scripts/font1.php?txt=test&color=cccccc&size=15">
【问题讨论】:
我不明白,为什么这个问题被否定了?我做错什么了?我只需要知道我应该在哪里编辑以放置边框,因为在 php 手册中我在imagefttext
或 imagecreatetruecolor
中找不到与边框相关的任何内容
不确定是否与您的问题有关,但我认为既然您使用的是 .ttf 字体文件,您应该使用imagettftext
而不是imagefttext
和一个小旁注..关于你的第二行..有一个功能:ucfirst
@mishu 谢谢我实际上知道那个函数,但我不知道第二行函数应该做什么,所以我不会弄乱那个......
将imagefttext
与imagettftext
切换,看起来几乎一样,但我会保留您的建议,谢谢!我尝试以多种方式编辑ImageColorAllocate
,但它所改变的只是字体颜色,而不是边框大小或颜色
【参考方案1】:
你可以这样做。
<?php
function imagettfstroketext(&$image, $size, $angle, $x, $y, &$textcolor, &$strokecolor, $fontfile, $text, $px)
for($c1 = ($x-abs($px)); $c1 <= ($x+abs($px)); $c1++)
for($c2 = ($y-abs($px)); $c2 <= ($y+abs($px)); $c2++)
$bg = imagettftext($image, $size, $angle, $c1, $c2, $strokecolor, $fontfile, $text);
return imagettftext($image, $size, $angle, $x, $y, $textcolor, $fontfile, $text);
// Create new canvas
$im = imagecreatetruecolor(170, 60);
// Set background to white
$gray = imagecolorallocate($im, 100, 100, 100);
imagefill($im, 0, 0, $gray);
// Set fron color and border color
$font_color = imagecolorallocate($im, 255, 255, 255);
$stroke_color = imagecolorallocate($im, 0, 0, 0);
//image, fontsize, angle, x, y, textcolor, bordercolor, font file, text, borderwidth
imagettfstroketext($im, 60, 0, 10, 50, $font_color, $stroke_color, "martel.ttf", "test", 2);
// Output
header('Content-type: image/jpg');
imagejpeg($im);
imagedestroy($im);
?>
【讨论】:
感谢您的回答,我将如何在函数中链接这些选项?在 html 行中,我必须在那里添加每个选项的值?那 ( $image ) 是从哪里来的? 更新:谢谢我想通了......透明背景是什么让边框变得混乱......当我为背景设置颜色时,边框保持正常以上是关于PHP 和 GD 库为文本添加 1px 实心边框?我得到了一个像点一样的边框的主要内容,如果未能解决你的问题,请参考以下文章