php 生成文字图片

php 生成文字图片

msg = $paras['text'];
        isset($paras['font']) && $this->font = $paras['font'];
        isset($paras['size']) && $this->size = $paras['size'];
        isset($paras['rot']) && $this->rot = $paras['rot'];
        isset($paras['pad']) && $this->pad = $paras['pad'];
        isset($paras['tr']) && $this->transparent = $paras['tr'];
        if (isset($paras['color']) && !empty($paras['color'])) {
            $this_color_hex = HexToRGB($paras['color']);
            $this->red = $this_color_hex['red']; // 文字颜色
            $this->grn = $this_color_hex['green'];
            $this->blu = $this_color_hex['blue'];
        } else {
            isset($paras['red']) && $this->red = $paras['red'];
            isset($paras['grn']) && $this->grn = $paras['grn'];
            isset($paras['blu']) && $this->blu = $paras['blu'];
        }
        if (isset($paras['bg_color']) && !empty($paras['bg_color'])) {
            $bg_color_hex = HexToRGB($paras['bg_color']);
            $this->bg_red = $bg_color_hex['red']; // 背景颜色.
            $this->bg_grn = $bg_color_hex['green'];
            $this->bg_blu = $bg_color_hex['blue'];
        } else {
            isset($paras['bg_red']) && $this->bg_red = $paras['bg_red'];
            isset($paras['bg_grn']) && $this->bg_grn = $paras['bg_grn'];
            isset($paras['bg_blu']) && $this->bg_blu = $paras['bg_blu'];
        }
        if (isset($paras['width']) && !empty($paras['width'])) {
            $this->width = $paras['width'];
            $this->msg = $this->autowrap($this->size, $this->font, $this->msg, $paras['width']);
        } else {
            $this->msg = $this->autowrap($this->size, $this->font, $this->msg);
        }
    }
    public function draw() {
        $width = 0;
        $height = 0;
        $offset_x = 0;
        $offset_y = 0;
        $bounds = array();
        $image = "";
        // 确定文字高度.
        $bounds = ImageTTFBBox($this->size, $this->rot, $this->font, "W");
        if ($this->rot < 0) {
            $font_height = abs($bounds[7] - $bounds[1]);
        } else if ($this->rot > 0) {
            $font_height = abs($bounds[1] - $bounds[7]);
        } else {
            $font_height = abs($bounds[7] - $bounds[1]);
        }
        // 确定边框高度.
        $bounds = ImageTTFBBox($this->size, $this->rot, $this->font, $this->msg);
        if ($this->rot < 0) {
            $width = abs($bounds[4] - $bounds[0]);
            $height = abs($bounds[3] - $bounds[7]);
            $offset_y = $font_height;
            $offset_x = 0;
        } else if ($this->rot > 0) {
            $width = abs($bounds[2] - $bounds[6]);
            $height = abs($bounds[1] - $bounds[5]);
            $offset_y = abs($bounds[7] - $bounds[5]) + $font_height;
            $offset_x = abs($bounds[0] - $bounds[6]);
        } else {
            $width = abs($bounds[4] - $bounds[6]);
            $height = abs($bounds[7] - $bounds[1]);
            $offset_y = $font_height;

            $offset_x = 0;
        }
        if ($this->width) {
            $image = imagecreate($this->width, $height + ($this->pad * 2) + 1);
        } else {
            $image = imagecreate($width + ($this->pad * 2) + 1, $height + ($this->pad * 2) + 1);
        }

        $background = ImageColorAllocate($image, $this->bg_red, $this->bg_grn, $this->bg_blu);
        $foreground = ImageColorAllocate($image, $this->red, $this->grn, $this->blu);
        if ($this->transparent) {
            ImageColorTransparent($image, $background);
        }

        ImageInterlace($image, false);
        // 画图.
        ImageTTFText($image, $this->size, $this->rot, $offset_x + $this->pad, $offset_y + $this->pad, $foreground, $this->font, $this->msg);
        // 输出为png格式.
        Header("Content-type: image/png");
        imagePNG($image);
    }
    // 自动调整宽度(字体大小, 字体名称, 字符串, 预设宽度, 角度)
    public function autowrap($fontsize, $fontface, $string, $width = "", $angle = 0) {
        // 将字符串拆分成一个个单字 保存到数组 letter 中
        for ($i = 0; $i < mb_strlen($string); $i++) {
            $letter[] = mb_substr($string, $i, 1, 'utf-8');
        }
        $letter = array_filter($letter);
        $content = "";
        for ($i = 0; $i < count($letter); $i++) {
            // 换行处理
            if ($letter[$i] == "/" && $letter[$i + 1] == "n") {
                $content .= "\n";
                unset($letter[$i]);
                unset($letter[$i + 1]);
                continue;
            }
            if ($width) {
                $teststr = $content . " " . $letter[$i];
                $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
                if (($testbox[2] > $width) && ($content !== "")) {
                    $content .= "\n";
                }
            }
            $content .= $letter[$i];
        }
        return $content;
    }
// Hex颜色转RGB颜色
    public function HexToRGB($colour) {
        if ($colour[0] == '#') {
            $colour = substr($colour, 1);
        }
        if (strlen($colour) == 6) {
            list($r, $g, $b) = array(
                $colour[0] . $colour[1],
                $colour[2] . $colour[3],
                $colour[4] . $colour[5],
            );
        } elseif (strlen($colour) == 3) {
            list($r, $g, $b) = array(
                $colour[0] . $colour[0],
                $colour[1] . $colour[1],
                $colour[2] . $colour[2],
            );
        } else {
            return false;
        }
        $r = hexdec($r);
        $g = hexdec($g);
        $b = hexdec($b);
        return array(
            'red' => $r,
            'green' => $g,
            'blue' => $b,
        );
    }
}
$png = new textPNG();
$png->draw();
?>

  

发表评论

邮箱地址不会被公开。 必填项已用*标注