Как объединить несколько изображений и текст в одно изображение?

У меня есть несколько изображений PNG внутри div, эти изображения являются PNG и представлены как одно изображение для пользователя в зависимости от пользовательских параметров, которые он выбрал. Кроме того, добавление текста также включено в качестве другой функции, которая позволяет добавить div с текстами выше этих изображений.

Теперь я хочу сгенерировать изображение с этими несколькими изображениями и текстом в сочетании, поддерживая размер шрифта и размер текста.

Напр. изображение, которое появляется на интерфейсе с комбинацией изображений и текста. (Ему удалось показать с позиционированием css) введите описание изображения здесь Где это делается из двух изображений ниже и текста

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

Это то, что я пробовал делать с изображениями: файл create-image.php

<?php createimageinstantly(); function createimageinstantly($img1='',$img2='',$img3=''){ $x=$y=1000; header('Content-Type: image/png'); $targetFolder = '/gw/media/uploads/processed/'; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $img1 = $targetPath.'img1.png'; $img2 = $targetPath.'img2.png'; $img3 = $targetPath.'img3.png'; $outputImage = imagecreatetruecolor(1000, 1000); $first = imagecreatefrompng($img1); $second = imagecreatefrompng($img2); $third = imagecreatefrompng($img3); imagecopy($outputImage,$first,0,0,0,0, $x, $y); imagecopy($outputImage,$second,0,0,0,0, $x, $y); imagecopy($outputImage,$third,0,200,-200,0, $x, $y); imagepng($outputImage, $targetPath .round(microtime(true) * 1000).'.png'); imagedestroy($outputImage); } ?> 

Но это дает мне весь черный цвет ! [введите описание изображения здесь

Кроме того, мне нужно смешать текст с окончательно сгенерированным изображением

Редактировал :

  • jpg изображения изменены на png

  • imagecopymege изменено на imagecopy

Последний результат:

  <?php createimageinstantly(); //$targetFolder = '/gw/media/uploads/processed/'; //$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; //$img3 = $targetPath.'img3.png'; //print_r(getimagesize('http://www.vapor-rage.com/wp-content/uploads/2014/05/sample.jpg')); function createimageinstantly($img1='',$img2='',$img3=''){ $x=$y=600; header('Content-Type: image/png'); $targetFolder = '/gw/media/uploads/processed/'; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $img1 = $targetPath.'img1.png'; $img2 = $targetPath.'img2.png'; $img3 = $targetPath.'img3.png'; $outputImage = imagecreatetruecolor(600, 600); // set background to white $white = imagecolorallocate($outputImage, 255, 255, 255); imagefill($outputImage, 0, 0, $white); $first = imagecreatefrompng($img1); $second = imagecreatefrompng($img2); $third = imagecreatefrompng($img3); //imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) imagecopyresized($outputImage,$first,0,0,0,0, $x, $y,$x,$y); imagecopyresized($outputImage,$second,0,0,0,0, $x, $y,$x,$y); imagecopyresized($outputImage,$third,200,200,0,0, 100, 100, 204, 148); imagepng($outputImage, $targetPath .round(microtime(true)).'.png'); imagedestroy($outputImage); } ?> 

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

И я достиг этого таким образом,

Использовали эти 3 изображения, img1.png, img2.png, img3.png

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

Файл create-image.php

  <?php createimageinstantly(); //$targetFolder = '/gw/media/uploads/processed/'; //$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; //$img3 = $targetPath.'img3.png'; //print_r(getimagesize('http://www.vapor-rage.com/wp-content/uploads/2014/05/sample.jpg')); function createimageinstantly($img1='',$img2='',$img3=''){ $x=$y=600; header('Content-Type: image/png'); $targetFolder = '/gw/media/uploads/processed/'; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $img1 = $targetPath.'img1.png'; $img2 = $targetPath.'img2.png'; $img3 = $targetPath.'img3.png'; $outputImage = imagecreatetruecolor(600, 600); // set background to white $white = imagecolorallocate($outputImage, 255, 255, 255); imagefill($outputImage, 0, 0, $white); $first = imagecreatefrompng($img1); $second = imagecreatefrompng($img2); $third = imagecreatefrompng($img3); //imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) imagecopyresized($outputImage,$first,0,0,0,0, $x, $y,$x,$y); imagecopyresized($outputImage,$second,0,0,0,0, $x, $y,$x,$y); imagecopyresized($outputImage,$third,200,200,0,0, 100, 100, 204, 148); // Add the text //imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) //$white = imagecolorallocate($im, 255, 255, 255); $text = 'School Name Here'; $font = 'OldeEnglish.ttf'; imagettftext($outputImage, 32, 0, 150, 150, $white, $font, $text); $filename =$targetPath .round(microtime(true)).'.png'; imagepng($outputImage, $filename); imagedestroy($outputImage); } ?> 

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

Ссылка: imagecopyresized & imagettftext

спасибо за предложения, сделанные с помощью комментариев / ответов. А также я написал это подробно http://sumankc.com/2016/01/30/merge-multiple-images-and-text-to-create-single-image-php-gd-library/ Добрый день!

Прежде всего, jpeg-изображения не имеют альфа-канала – это означает, что каждый пиксель в изображении имеет некоторый цвет , без информации о его прозрачности. Было бы сложно создать обходной путь для этого, но вы могли бы это сделать. Если вы можете – я советую вам использовать формат PNG, который содержит информацию о прозрачности.

Во-вторых, попробуйте прочитать раздел комментариев в документах PHP для imagecopymerge . Этот комментарий содержит некоторую полезную информацию, которую вы можете использовать:

Сина Салек: Я только что проверил отслеживание проблем PHP, и основной разработчик говорит, что эта функция никогда не предназначалась для поддержки альфа-канала! и они отказались передать предоставленный патч!

И после этого комментатор привел пример, который, я думаю, мог бы сработать.