在 PHP 中如何将文本转换为图像

在许多情况下,我们需要在我们的 Web 应用程序中动态创建动态图像并在图像上写入文本。
如果我们有这样的需求,请不要担心,我们将提供一个简单的 PHP 脚本来将文本转换为图像并将其保存为 PNG 或者 JPG 格式。

在本教程中,我们将向我们展示使用 PHP 从文本创建图像的最简单方法。
为了控制文本到图像的创建过程,将创建一个 PHP 类。
通过使用这个 PHP 类,我们可以轻松创建图像并向图像添加多行文本字符串。

GD 库将用于在我们的 PHP 脚本中创建和操作图像文件。
因此,在开始之前,请确保服务器上安装了 PHP GD。

在 PHP 中将文本字符串转换为图像

包含“TextToImage.php”文件(TextToImage 类)并创建一个对象。
调用“createImage()”函数并提供文本字符串。
如果要向图像添加多行,请在新行前添加“\n”。

//include TextToImage class
require_once 'TextToImage.php';
//create img object
$img = new TextToImage;
//create image from text
$text = 'Welcome to onitroad.\nThe World of Programming.';
$img->createImage($text);

要显示图像,请使用“showImage()”函数。

//display image
$img->showImage();

要将图像文件保存为 PNG 或者 JPG 格式,请使用“saveAsPng()”或者“saveAsJpg()”函数。
指定保存图片的文件名和位置,否则图片会以默认名称保存到脚本所在目录。

//以 png 格式保存
$img->saveAsPng('codex-text-to-image','images/');
//以 jpg 格式保存
$img->saveAsJpg('codex-text-to-image','images/');

TextToImage 类

TextToImage PHP 类有助于生成图像并向图像添加文本。
TextToImage 类包含 4 个函数,这些函数将执行以下操作。

  • 'createImage()' - 从文本创建图像。需要提供要写入图像的文本字符串。此外,我们可以指定文本字体大小、图像宽度和图像高度。
  • 'showImage()' - 返回由 createImage() 函数创建的图像。
  • 'saveAsPng()' - 将图像文件保存为 .png 格式。我们可以指定文件名和保存图像的位置。
  • 'saveAsJpg()' - 将图像文件保存为 .jpg 格式。我们可以指定文件名和保存图像的位置。
<?php

class TextToImage {
    private $img;

    /**
     * Create image from text
     * @param string text to convert into image
     * @param int font size of text
     * @param int width of the image
     * @param int height of the image
     */
    function createImage($text, $fontSize = 20, $imgWidth = 400, $imgHeight = 80){
        //text font path
        $font = 'fonts/the_unseen.ttf';

        //create the image
        $this->img = imagecreatetruecolor($imgWidth, $imgHeight);

        //create some colors
        $white = imagecolorallocate($this->img, 255, 255, 255);
        $grey = imagecolorallocate($this->img, 128, 128, 128);
        $black = imagecolorallocate($this->img, 0, 0, 0);
        imagefilledrectangle($this->img, 0, 0, $imgWidth - 1, $imgHeight - 1, $white);

        //break lines
        $splitText = explode ( "\n" , $text );
        $lines = count($splitText);

        foreach($splitText as $txt){
            $textBox = imagettfbbox($fontSize,$angle,$font,$txt);
            $textWidth = abs(max($textBox[2], $textBox[4]));
            $textHeight = abs(max($textBox[5], $textBox[7]));
            $x = (imagesx($this->img) - $textWidth)/2;
            $y = ((imagesy($this->img) + $textHeight)/2)-($lines-2)*$textHeight;
            $lines = $lines-1;

            //add some shadow to the text
            imagettftext($this->img, $fontSize, $angle, $x, $y, $grey, $font, $txt);

            //add the text
            imagettftext($this->img, $fontSize, $angle, $x, $y, $black, $font, $txt);
        }
	return true;
    }

    /**
     * Display image
     */
    function showImage(){
        header('Content-Type: image/png');
        return imagepng($this->img);
    }

    /**
     * Save image as png format
     * @param string file name to save
     * @param string location to save image file
     */
    function saveAsPng($fileName = 'text-image', $location = ''){
        $fileName = $fileName.".png";
        $fileName = !empty($location)?$location.$fileName:$fileName;
        return imagepng($this->img, $fileName);
    }

    /**
     * Save image as jpg format
     * @param string file name to save
     * @param string location to save image file
     */
    function saveAsJpg($fileName = 'text-image', $location = ''){
        $fileName = $fileName.".jpg";
        $fileName = !empty($location)?$location.$fileName:$fileName;
        return imagejpeg($this->img, $fileName);
    }
}
日期:2020-06-02 22:15:27 来源:oir作者:oir