php文字转图片api,源码:php文字转图片的类

昨天在qq空间看见一篇“神奇的日志”,不同的访客看到同一张图片会显示对应访客的信息,用chrome 查看了下图片来源是个php文件; 基本原理就是 通过 php文件判断来源页面的url(url中包含qq号码),获取qq号码后通过腾讯的开放api接口,获取qq昵称和qq头像,

昨天在qq空间看见一篇“神奇的日志”,不同的访客看到同一张图片会显示对应访客的信息,用chrome 查看了下图片来源是个php文件;

基本原理就是 通过 php文件判断来源页面的url(url中包含qq号码),获取qq号码后通过腾讯的开放api接口,获取qq昵称和qq头像,然后用gb函数画图,输出

今天试着在网上找到一个文字转图片的程序,改吧改吧写了一个类似的程序,但是写完发了几篇日志才发现腾讯好像已经屏蔽掉外部图片在个人中心中显示了;

把改过的一个 php 文字转图片的类发上来给大家分享下,新手一枚代码改的不是很规整,见谅。。

文件名 Text2Img.class.php

$val){

if(!in_array($key,get_class_vars(get_class($this)))){

continue;

}else{

$this->$key=$val;

}

}

}

private function str_div($str, $width = 10){

$strArr = array();

$len = strlen($str);

$count = 0;

$flag = 0;

while($flag < $len){

//echo $str[$flag].'

';

if(ord($str[$flag]) > 128){

$count += 1;

$flag += 3;

}

else{

$count += 0.5;

$flag += 1 ;

}

if($count >= $width){

$strArr[] = substr($str, 0, $flag);

$str = substr($str, $flag);

$len -= $flag;

$count = 0;

$flag = 0;

}

}

$strArr[] = $str;

return $strArr;

}

private function str2rgb($str)

{

$color = array('red'=>0, 'green'=>0, 'blue'=>0);

$str = str_replace('#', '', $str);

$len = strlen($str);

if($len==6){

$arr=str_split($str,2);

$color['red'] = (int)base_convert($arr[0], 16, 10);

$color['green'] = (int)base_convert($arr[1], 16, 10);

$color['blue'] = (int)base_convert($arr[2], 16, 10);

return $color;

}

if($len==3){

$arr=str_split($str,1);

$color['red'] = (int)base_convert($arr[0].$arr[0], 16, 10);

$color['green'] = (int)base_convert($arr[1].$arr[1], 16, 10);

$color['blue'] = (int)base_convert($arr[2].$arr[2], 16, 10);

return $color;

}

return $color;

}

public function text2Img($text){

if($text==''){

$this->Message = "没有文字";

return false;

}

$text = substr($text, 0, 30000); #截取前一万个字符

$paddingTop = 20;

$paddingLeft = 15;

$paddingBottom = 20;

$copyrightHeight = 36;

$canvasWidth = 440;

$canvasHeight = $paddingTop + $paddingBottom + $copyrightHeight;

$fontSize = 12;

$lineHeight = intval($fontSize * 1.8);

$textArr = array();

$tempArr = explode("\n", trim($text));

$j = 0;

foreach($tempArr as $v){

$arr = $this->str_div($v, 25);

$textArr[] = array_shift($arr);

foreach($arr as $v){

$textArr[] = $this->haveBrLinker . $v;

$j ++;

if($j > 100){ break; }

}

$j ++;

if($j > 100){ break; }

}

$textLen = count($textArr);

$canvasHeight = $lineHeight * $textLen + $canvasHeight;

$im = imagecreatetruecolor($canvasWidth, $canvasHeight); #定义画布

$colorArray = $this->str2rgb($this->LibiBackColor);

imagefill($im, 0, 0, imagecolorallocate($im, $colorArray['red'], $colorArray['green'], $colorArray['blue']));

$colorArray = $this->str2rgb('666666');

$colorLine = imagecolorallocate($im, $colorArray['red'], $colorArray['green'], $colorArray['blue']);

$padding = 3;

$x1 = $y1 = $x4 = $y2 = $padding;

$x2 = $x3 = $canvasWidth - $padding - 1;

$y3 = $y4 = $canvasHeight - $padding - 1;

imageline($im, $x1, $y1, $x2, $y2, $colorLine);

imageline($im, $x2, $y2, $x3, $y3, $colorLine);

imageline($im, $x3, $y3, $x4, $y4, $colorLine);

imageline($im, $x4, $y4, $x1, $y1, $colorLine);

//字体路径

if(!is_file($this->LibiFontStyle)){

$this->Message = "字体文件不存在!";

return false;

}

//写入四个随即数字

$colorArray = $this->str2rgb($this->LibiFontColor);

$fontColor = imagecolorallocate($im, $colorArray['red'], $colorArray['green'], $colorArray['blue']);

foreach($textArr as $k=>$text){

$offset = $paddingTop + $lineHeight * ($k + 1) - intval(($lineHeight-$fontSize) / 2);

imagettftext($im, $fontSize, 0, $paddingLeft, $offset, $fontColor, $this->LibiFontStyle, $text);

}

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

$offset += 18;

$text = '----END----';

imagettftext($im, 10, 0, $paddingLeft, $offset, $fontColor, $this->LibiFontStyle, $text);

$offset += 18;

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

$text = 'By Libi';

imagettftext($im, 10, 0, $paddingLeft + 310, $offset, $fontColor, $this->LibiFontStyle, $text);

header('Content-Type: image/png');

imagepng($im, $imgfile);

imagedestroy($im);

}

}

?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值