php文字生成图片(php文字生成图片github)

http://www.itjxue.com  2023-01-27 15:20  来源:未知  点击次数: 

如何用php把文字转变成图片.也就是往网页输入文字.通过网站后台生成png图片

首先要确定你的环境支持GD库;

程序很简单:

$str = "测试一下";//输入的文字

header("Content-type: image/jpeg");

$im = imagecreate(100, 30) or die("Cannot Initialize new GD image stream");//图片大小

$str=iconv("gb2312","UTF-8",$str);

for($i=0;$i200;$i++) //加入干扰象素

{

$clr = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($im, rand()%100 , rand()%50 , $clr);

}

//$str="sss";

$black = imagecolorallocate($im, 0, 0, 0);

$fnt = "c:\windows\fonts\simhei.ttf"; //字体文件

ImageTTFText($im, 15, 0, 10, 20, $black, $fnt, $str);

imagejpeg($im);

//imagepng($im);

imagedestroy($im);

用php代码怎么以背景图片加上文字生成新的图片,然后在标题处绝对调用该图片?

?php

ob_clean(); //清除输出缓存

header("Content-type:image/jpeg"); //设置输出类型

$img="images/test.jpg"; //背景图片名

if(isset($_GET["img"]))$img=$_GET["img"]; //也可以通过img参数传入

$im=imagecreatefromjpeg($img); //读入背景图片

$text="文字内容"; //要加上的文字内容

if(isset($_GET["text"]))$text=$_GET["text"]; //也可以通过text参数传入

$fontFile="xxx.ttf"; //字体文件名,必须要

$fontSize=36; //字体尺寸

$fontColor=ImageColorAllocate($im,0,0,0); //字体颜色,这里是黑色

$textAngle=0; //文字显示的角度,0表示水平显示

$textLeft=20; //文字显示的x坐标

$textTop=60; //文字显示的y坐标

imagefttext($im,$fontSize,$textAngle,$textLeft,$textTop,$fontColor,$fontFile,$text); //把文字覆盖到图片上

Imagejpeg($im); //输出图片

ImageDestroy($im); //销毁图片

?

把以上文字保存为php文件,比如 img.php

然后在需要调用图片的地方用 img src="img.php?img=背景图片文件路径text=要加上的文字"/ 来调用

比如 img src="img.php?img=images/back.jpgtext=你好"/

如何将文字用php转换成图片?

header ("Content-type: image/png");

function autowrap($fontsize, $angle, $fontface, $string, $width) {

// 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度

$content = "";

// 将字符串拆分成一个个单字 保存到数组 letter 中

for ($i=0;$imb_strlen($string);$i++) {

$letter[] = mb_substr($string, $i,1,'utf-8');

}

foreach ($letter as $l) {

$teststr = $content." ".$l;

$testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);

// 判断拼接后的字符串是否超过预设的宽度

if (($testbox[2] $width) ($content !== "")) {

$content .= "\n";

}

$content .= $l;

}

return $content;

}

$text = $_GET['text'];//传过来的要处理的文字

$text = autowrap(14, 0, "msyh.ttf", $text, 250); // 自动换行处理

$im = imagecreate(278,350);

$background = imagecolorallocate($im, 255, 0, 0);

imagecolortransparent($im,$background); //imagecolortransparent() 设置具体某种颜色为透明色,若注释

$A = "img/".$_GET['mo'].".png";

$black = imagecreatefromstring(file_get_contents($A));

$white = imagecolorallocate($black,0x66,0x66,0x66);

imagettftext($black,12,0,30,55,$white,"msyh.ttf",$text); //字体设置部分linux和windows的路径可能不同

imagepng($black);//文字生成的图

php图文转化成图片 (图文=图片加文字)

什么是图文?

如果只是截图的话window下可以用插件

截取当前屏幕画面.保存 编辑之类的.

用PHP 调用COM类

可以去网上找找截图插件..

我以前用按键精灵里面VBS做过调用其他插件截图

不过忘记的差不多了........

php如何生成加粗或者斜体的文字样式图片

加粗或者斜体的文字可以用php的函数控制.我想你是想生成验证码图片是吗?

如果是想生成验证么图片有几个函数可以考虑

imagecreate($length,$height)创建图片.参数是图片的宽度和高度

imagecolorallocate($image,$r,$g,$b)设置背景色,r b g就是图片的三色rgb参数.这个可以由传入0-255的随机数决定随机的背景色.还可以生成字体色

imagettftext($_image,$fontSize,?mt_rand(-40,?70),?$codeNX,$fontSize*1.5,$_color,?$ttf,?$code[$i]);写入随机的文字,这里要一个字一个字写.所以这个函数要循环调用.

百度了一下 找到了一个类...如下

?php

/**

?*?安全验证码

?*?

?*?安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。

?*?如果用中文做验证码(我这里不是哦,有兴趣你来改成用中文的),安全度会更好些,但验证码扭曲和旋转是王道,用了字体也算是已经给字体扭曲了,我就不再去给他添一只扭曲的足了。

?*?可配置的属性都是一些简单直观的变量,我就不用弄一堆的setter/getter了

?*

?*?@author?流水孟春?cmpan(at)qq.com

?*?@copyright?NEW?BSD

?*?@link?

?*?@link?

?*/

class?YL_Security_Secoder?{

/**

?*?验证码的session的下标

?*?

?*?@var?string

?*/

public?static?$seKey?=?'sid.sekey.ylans.cn';

public?static?$expire?=?3000;?????//?验证码过期时间(s)

/**

?*?验证码中使用的字符,01IO容易混淆,建议不用

?*

?*?@var?string

?*/

public?static?$codeSet?=?'346789ABCDEFGHJKLMNPQRTUVWXY';

public?static?$fontSize?=?25;?????//?验证码字体大小(px)

public?static?$useCurve?=?true;???//?是否画混淆曲线

public?static?$useNoise?=?true;???//?是否添加杂点

public?static?$imageH?=?0;????????//?验证码图片宽

public?static?$imageL?=?0;????????//?验证码图片长

public?static?$length?=?4;????????//?验证码位数

public?static?$bg?=?array(243,?251,?254);??//?背景

protected?static?$_image?=?null;?????//?验证码图片实例

protected?static?$_color?=?null;?????//?验证码字体颜色

/**

?*?输出验证码并把验证码的值保存的session中

?*?验证码保存到session的格式为:?$_SESSION[self::$seKey]?=?array('code'?=?'验证码值',?'time'?=?'验证码创建时间');

?*/

public?static?function?entry()?{

//?图片宽(px)

self::$imageL?||?self::$imageL?=?self::$length?*?self::$fontSize?*?1.5?+?self::$fontSize*1.5;?

//?图片高(px)

self::$imageH?||?self::$imageH?=?self::$fontSize?*?2;

//?建立一幅?self::$imageL?x?self::$imageH?的图像

self::$_image?=?imagecreate(self::$imageL,?self::$imageH);?

//?设置背景??????

imagecolorallocate(self::$_image,?self::$bg[0],?self::$bg[1],?self::$bg[2]);?

//?验证码字体随机颜色

self::$_color?=?imagecolorallocate(self::$_image,?mt_rand(1,120),?mt_rand(1,120),?mt_rand(1,120));

//?验证码使用随机字体?

$ttf?=?dirname(__FILE__)?.?'/ttfs/'?.?mt_rand(1,?20)?.?'.ttf';??

if?(self::$useNoise)?{

//?绘杂点

self::_writeNoise();

}?

if?(self::$useCurve)?{

//?绘干扰线

self::_writeCurve();

}

//?绘验证码

$code?=?array();?//?验证码

$codeNX?=?0;?//?验证码第N个字符的左边距

for?($i?=?0;?$iself::$length;?$i++)?{

$code[$i]?=?self::$codeSet[mt_rand(0,?27)];

$codeNX?+=?mt_rand(self::$fontSize*1.2,?self::$fontSize*1.6);

//?写一个验证码字符

imagettftext(self::$_image,?self::$fontSize,?mt_rand(-40,?70),?$codeNX,?self::$fontSize*1.5,?self::$_color,?$ttf,?$code[$i]);

}

//?保存验证码

isset($_SESSION)?||?session_start();

$_SESSION[self::$seKey]['code']?=?join('',?$code);?//?把校验码保存到session

$_SESSION[self::$seKey]['time']?=?time();??//?验证码创建时间

header('Cache-Control:?private,?max-age=0,?no-store,?no-cache,?must-revalidate');

header('Cache-Control:?post-check=0,?pre-check=0',?false);

header('Pragma:?no-cache');

header("content-type:?image/png");

//?输出图像

imagepng(self::$_image);?

imagedestroy(self::$_image);

}

/**?

?*?画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)?

?????*??????

?????*??????高中的数学公式咋都忘了涅,写出来

?* 正弦型函数解析式:y=Asin(ωx+φ)+b

?*??????各常数值对函数图像的影响:

?*????????A:决定峰值(即纵向拉伸压缩的倍数)

?*????????b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)

?*????????φ:决定波形与X轴位置关系或横向移动距离(左加右减)

?*????????ω:决定周期(最小正周期T=2π/∣ω∣)

?*

?*/

????protected?static?function?_writeCurve()?{

$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅

$b?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?Y轴方向偏移量

$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量

$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期

$w?=?(2*?M_PI)/$T;

$px1?=?0;??//?曲线横坐标起始位置

$px2?=?mt_rand(self::$imageL/2,?self::$imageL?*?0.667);??//?曲线横坐标结束位置? ????

for?($px=$px1;?$px=$px2;?$px=$px+?0.9)?{

if?($w!=0)?{

$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b

$i?=?(int)?((self::$fontSize?-?6)/4);

while?($i??0)?{

????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里画像素点比imagettftext和imagestring性能要好很多 ????

????$i--;

}

}

}

$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅

$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量

$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期

$w?=?(2*?M_PI)/$T;

$b?=?$py?-?$A?*?sin($w*$px?+?$f)?-?self::$imageH/2;

$px1?=?$px2;

$px2?=?self::$imageL;

for?($px=$px1;?$px=$px2;?$px=$px+?0.9)?{

if?($w!=0)?{

$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b

$i?=?(int)?((self::$fontSize?-?8)/4);

while?($i??0)?{

????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多

????$i--;

}

}

}

}

/**

?*?画杂点

?*?往图片上写不同颜色的字母或数字

?*/

protected?static?function?_writeNoise()?{

for($i?=?0;?$i??10;?$i++){

//杂点颜色

????$noiseColor?=?imagecolorallocate(

??????????????????????self::$_image,?

??????????????????????mt_rand(150,225),?

??????????????????????mt_rand(150,225),?

??????????????????????mt_rand(150,225)

??????????????????);

for($j?=?0;?$j??5;?$j++)?{

//?绘杂点

????imagestring(

????????self::$_image,

????????5,?

????????mt_rand(-10,?self::$imageL),?

????????mt_rand(-10,?self::$imageH),?

????????self::$codeSet[mt_rand(0,?27)],?//?杂点文本为随机的字母或数字

????????$noiseColor

????);

}

}

}

/**

?*?验证验证码是否正确

?*

?*?@param?string?$code?用户验证码

?*?@return?bool?用户验证码是否正确

?*/

public?static?function?check($code)?{

isset($_SESSION)?||?session_start();

//?验证码不能为空

if(empty($code)?||?empty($_SESSION[self::$seKey]))?{

return?false;

}

//?session?过期

if(time()?-?$_SESSION[self::$seKey]['time']??self::$expire)?{

unset($_SESSION[self::$seKey]);

return?false;

}

if($code?==?$_SESSION[self::$seKey]['code'])?{

return?true;

}

return?false;

}

}

//?useage

/*

YL_Security_Secoder::$useNoise?=?false;??//?要更安全的话改成true

YL_Security_Secoder::$useCurve?=?true;

YL_Security_Secoder::entry();

*/

/*

//?验证验证码

if?(!YL_Security_Secoder::check(@$_POST['secode']))?{

print?'error?secode';

}

*/

这是效果

php文字生成图片的UTF-8编码不支持

吧这行去掉试试看$tel = mb_convert_encoding($bbb, "UTF-8", "GB2312");

由于页面本事就是utf-8了。所以没必要转码。转了就会出错

(责任编辑:IT教学网)

更多

推荐通讯数据软件文章