欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

急生成图片的代码,改了半日不行,求高手了!

程序员文章站 2022-05-18 09:38:03
...
急~生成图片的代码,改了半天不行,求高手了!!
这个代码是直接将文字转换为图片的,然后默认生成的图片是黑色背景的。。
现在想求高手帮忙如何改为,背景不要色黑色,而是直接为同目录的.jpg图片作为背景呢?

也就是说,生成的图片背景为1.jpg,而不是现在的颜色背景?求如何改。。。研究半天不懂。。


function str_div($str, $width = 10){
$strArr = array();
$len = strlen($str);
$count = 0;
$flag = 0;
while($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;
}

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;
}

function makeimger($text = "内容获取失败...",$types,$ids){
$setStyle = '52A300'; #设置颜色,也可以开发为页面可选择并传递这个参数,用|格式
$haveBrLinker = ""; #超长使用分隔符
$fontFile = 'simfang.ttf'; #字体文件名,放font目录下,也可以开发为页面可选择并传递这个参数
$userStyle = explode('|', $setStyle); #分开颜色
$text = substr($text, 0, 1000); #截取前一万个字符
$text = iconv("GB2312", "UTF-8",$text);
$imgpath = "".$types."/"; #图片存放地址
if(!is_dir($imgpath)){ mkdir($imgpath); }
$imgfile = $imgpath . $ids . '.gif';

if(file_exists($imgfile))
{
return $imgfile;
}
else
{
//这里是边框宽度,可以前台传递参数
$paddingTop = 500;
$paddingLeft = 35;
$paddingBottom = 260;
$copyrightHeight = 0;

$canvasWidth = 640;
$canvasHeight = 1136;
//$canvasHeight = $paddingTop + $paddingBottom + $copyrightHeight;

$fontSize = 38;
$lineHeight = intval($fontSize * 1.8);

$textArr = array();
$tempArr = explode("\n", trim($text));
$j = 0;
foreach($tempArr as $v){
$arr = str_div($v, 25);
$textArr[] = array_shift($arr);
foreach($arr as $v){
$textArr[] = $haveBrLinker . $v;
$j ++;
if($j > 100){ break; }
}
$j ++;
if($j > 100){ break; }
}

$textLen = count($textArr);

$canvasHeight = $lineHeight * $textLen + $canvasHeight;
$im = imagecreatetruecolor($canvasWidth, $canvasHeight); #定义画布
$colorArray = str2rgb($userStyle[1]);
imagefill($im, 0, 0, imagecolorallocate($im, $colorArray['red'], $colorArray['green'], $colorArray['blue']));

$colorArray = str2rgb('000000');
$colorLine = imagecolorallocate($im, $colorArray['red'], $colorArray['green'], $colorArray['blue']);
$padding = 0;
$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);

//字体路径,,也可以开发为页面可选择并传递这个参数
$fontStyle = 'font/' . $fontFile;
if(!is_file($fontStyle)){
exit('请先选择字体文件哦!');
}

//写入四个随即数字
$colorArray = str2rgb($userStyle[0]);
$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, $fontStyle, $text);
}

$fontColor = imagecolorallocate($im, 0, 0, 0);
$offset += 18;
$text = '----------------------------------------------------------------------------------------------';
imagettftext($im, 10, 0, $paddingLeft, $offset, $fontColor, $fontStyle, $text);
急生成图片的代码,改了半日不行,求高手了!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频