如何使用PHP在图像下添加文本?

时间:2018-01-05 16:30:02

标签: php

我使用以下PHP代码使用PHP代码在图像上使用背景颜色编写文本。

但它正在添加图片背景颜色的文字。我需要将文字添加到图像下面的背景颜色 。我怎么能用PHP做到这一点?

PHP代码:

// Create Image From Existing File
$jpg_image = imagecreatefromjpeg('02.JPG');
$orig_width = imagesx($jpg_image);
$orig_height = imagesy($jpg_image);

// Allocate A Color For The background
$bcolor=imagecolorallocate($jpg_image, 255, 255, 255);

//Create background
imagefilledrectangle($jpg_image,  0, $orig_height*0.9, $orig_width, $orig_height, $bcolor);

// Set Path to Font File
$font_path = realpath(dirname(__FILE__)).'/arial.ttf';

// Set Text to Be Printed On Image
$text = "New Content Goes to here";

// Allocate A Color For The Text
$color = imagecolorallocate($jpg_image, 0, 0, 0);      

// Print Text On Image
imagettftext($jpg_image,  20, 0, 10, $orig_height-10, $color, $font_path, $text);

//Set the Content Type
header('Content-type: image/jpg');

// Send Image to Browser
imagejpeg($jpg_image);

// Clear Memory
imagedestroy($jpg_image);

图片:

enter image description here

1 个答案:

答案 0 :(得分:1)

查看代码,您似乎想要的是展开图像画布,然后在其下面写下文本。

您无法将图像下方的文字添加为单独的(非图像)实体,因为您的HTML标题只输出图像

因此;在图像上添加文字:

  • 创建一个新画布,图像的大小加上一个额外的高度(~5%)
  • 设置画布的背景颜色(这将显示在文本后面)
  • 将图像导入画布
  • 导入图像下方的文字。
  • Vwallah!

    // Create Image From Existing File
    $jpg_image = imagecreatefromjpeg('02.JPG');
    $orig_width = imagesx($jpg_image);
    $orig_height = imagesy($jpg_image);
    
    
    // Create your canvas containing both image and text
    $canvas = imagecreatetruecolor($orig_width,  ($orig_height + 40));
    // Allocate A Color For The background
    $bcolor = imagecolorallocate($canvas, 255, 255, 255);
    // Add background colour into the canvas
    imagefilledrectangle( $canvas, 0, 0, $orig_width, ($orig_height + 40), $bcolor);
    
    // Save image to the new canvas
    imagecopyresampled ( $canvas , $jpg_image , 0 , 0 , 0 , 0, $orig_width , $orig_height , $orig_width , $orig_height )
    
    // Tidy up:
    imagedestroy($jpg_image);
    
    // Set Path to Font File
    $font_path = realpath(dirname(__FILE__)).'/arial.ttf';
    
    // Set Text to Be Printed On Image
    $text = "New Content Goes to here";
    
    // Allocate A Color For The Text
    $color = imagecolorallocate($canvas, 0, 0, 0);      
    
    // Print Text On Image
    imagettftext($canvas,  20, 0, 10, $orig_height-10, $color, $font_path, $text);
    
    //Set the Content Type
    header('Content-type: image/jpg');
    imagejpeg($canvas);
    imagedestroy($canvas);
    

  • 如果要在非图像媒体(如网站)上查看,这不是最好的方法。最好使用HTML5 <figure><figcaption>元素。

  • 请注意,如果要添加的标题文本是多行等,则需要调整画布的额外大小。此外,换行可能不会自然发生,需要手动设置。

  • 这通常是内存效率低下的,并且取决于您希望实现的结果类型,将会有更好的方法。

  • 另一种(非PHP)更有效的方法是使用SVG图形。