Как добавить текст на изображение с помощью PHP

#php

#php

Вопрос:

У меня есть это изображение:

введите описание изображения здесь

Между текстом я хочу добавить немного текста. Для этого у меня есть следующий код:

 <?php
error_reporting(E_ALL);

$thumb_src              = 'copyright-symbol.png';
$explode                = explode('.', $thumb_src);                
$extension              = strtolower( end ( $explode ) );
$file_name              = basename( $thumb_src );

//image_resize_base_width( $relative_url, $relative_url, 350, $extension);
$jpg_image = imagecreatefrompng( $thumb_src );

// set font size
$font        = @imageloadfont($jpg_image);
$fontSize    = imagefontwidth($font);

$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 );

$font_path = 'font/arial.ttf';
$path = 'upload';
$text = 'cc-by-nd-';

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


// Print Text On Image
imagettftext( $canvas, 13, 0, 0, $orig_height   25, $color, $font_path, $text) ;
// Send Image to Browser

imagepng( $canvas, $path  . '/' . $file_name );

// Clear Memory
imagedestroy($canvas);
 

Но код не добавляет текст к изображению. Что-то не так в моем коде?

Комментарии:

1. Возможно, потребуется удалить @ из $font = @imageloadfont($jpg_image); . Похоже, вы загружаете изображение в виде шрифта, это $jpg_image растровый шрифт?

2. var_dump($jpg_image) возвращается resource(3) of type (gd) .

3. Больше информации здесь: php.net/manual/en/function.imageloadfont.php

4. Смотрите здесь: code-boxx.com/php-add-text-image

5. @AbsoluteBeginner можете ли вы найти какие-либо проблемы в моем коде?

Ответ №1:

Вы можете изменить коды на

 <?php
error_reporting(E_ALL);

header('Content-Type: image/png');

$thumb_src              = 'copyright-symbol.png';
$explode                = explode('.', $thumb_src);                
$extension              = strtolower( end ( $explode ) );
$file_name              = basename( $thumb_src );

//image_resize_base_width( $relative_url, $relative_url, 350, $extension);
$jpg_image = imagecreatefrompng( $thumb_src );

// set font size
$font        = @imageloadfont($jpg_image);
$fontSize    = imagefontwidth($font);

$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 );

$font_path = './font/arial.ttf';
//$path = 'upload';


// Create some colors
$white = imagecolorallocate($canvas, 255, 255, 255);
$grey = imagecolorallocate($canvas, 128, 128, 128);
$black = imagecolorallocate($canvas, 0, 0, 0);
imagefilledrectangle($canvas, 0, 0, 399, 29, $white);

// The text to draw
// Replace path by your own font path
$font = 'font/arial.ttf';

$text = 'cc-by-nd-';

// Add some shadow to the text

imagettftext( $canvas, 100, 0, ($orig_width / 2) - 300, ($orig_height/2) , $color, $font_path, $text) ;


// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($canvas);
imagedestroy($canvas);



?>
 

Результат

Комментарии:

1. Позвольте мне попробовать это сейчас

2. Показывая мне черный фон

3. Пожалуйста, используйте изображение, которое я загрузил.

4. Ответ исправлен (пожалуйста, убедитесь arial.ttf , что файл существует в папке шрифтов)