php文字生成图片(php文字生成图片github)
如何用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了。所以没必要转码。转了就会出错