热搜:NVER node 开发 php

PHP GD库水印自动换行无法显示函数文字

2024-07-22 10:50:01
PHP GD库水印自动换行无法显示函数文字

在网上找的一些代码拼凑而成的。但最后一步不显示的总不是自己的文本内容,代码如下:

<?php  if(isset($_GET['str']) and $_GET['str']!=""){  $im = imagecreatefromjpeg('gd.jpg');  $font_size = 12;  $fontname = '33.ttf';  $black = imagecolorallocate($im,0,0,0);  $str = $_GET['str'] ;    function chararray($str,$charset="gbk"){        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";        preg_match_all($re[$charset], $str, $match);        return $match;    }    /* 返回一个字符串在图片中所占的宽度 */    function charwidth($fontsize,$fontangle,$ttfpath,$char){        $box = @imagettfbbox($fontsize,$fontangle,$ttfpath,$char);        $width = max($box[2], $box[4]) - min($box[0], $box[6]);        return $width;    }        /* 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度, 编码 */    function autowrap($fontsize,$fontangle,$ttfpath,$str,$width,$charset='gbk'){        $_string = "";        $_width = 0;        $temp = chararray($str);        //var_dump($temp);        foreach ($temp[0] as $k=>$v){            $w = charwidth($fontsize,$fontangle,$ttfpath,$v);            $_width += intval($w);            if (($_width > $width) && ($v !== "")){                $_string .= "\n";                $_width = 0;            }            $_string .= $v;            $w = 0;            //echo $v;        }        $_string = mb_convert_encoding($_string, "html-entities","gbk" );        return $_string;    }    $str = autowrap(12,0,'33.ttf','返回一个字符的数组',250);  imagettftext($im,$font_size,0,35,160,$black,$fontname,$str);  header('Content-type: image/jpeg');  imagejpeg($im);  imagedestroy($im) ;  } ?>


要怎样把返回一个字符的数组这几个词换成str传递过来的参数呢?谢谢大神


回复讨论(解决方案)

能不能把你最后一句话 “要怎样把返回一个字符的数组这几个词换成str传递过来的参数呢?”    写一个例子贴出来,你上面的代码最后一步是指 这个?imagettftext($im,$font_size,0,35,160,$black,$fontname,$str);

能不能把你最后一句话 “要怎样把返回一个字符的数组这几个词换成str传递过来的参数呢?”    写一个例子贴出来,你上面的代码最后一步是指 这个?imagettftext($im,$font_size,0,35,160,$black,$fontname,$str);



我是想把“返回一个字符的数组”那段替换成自己传递过来的函数
就是实现文本自动换行的功能。。。因为是小白只能复制一段代码过来修改
自己把:    $str = autowrap(12,0,'33.ttf','返回一个字符的数组',250); 这段改成    $str = autowrap(12,0,'33.ttf','$_GET['str']',250);
这样后直接不能接收,不知道是语法的问题还是哪的问题,去掉引号又变成了空的。。。不知道哪里出了问题,所以来求解

简单点就是:?str=你好吗你好吗你好吗你好吗你好吗你好吗你好吗    传递过来后在第七八个字之后自动换行水印在图片上

自己改了下,定义了个新函数已经搞定了,谢谢大家