Я пытаюсь создать изображения из динамических текстовых данных в GD и разместить логотип в верхнем углу. Цвет фона изображения будет меняться в зависимости от переданных данных, поэтому я не могу просто сохранить логотип как изображение без альфа-канала.
Я создаю изображение, заливаю его динамическим фоновым цветом с помощью imagefill (), затем добавляю текст с помощью imagettftext () и затем загружаю свой логотип. У меня возникают проблемы с получением логотипа на изображении без сохранения его цвета фона «прозрачный». Поэтому я бы хотел, чтобы за ним был динамический цвет фона, который устанавливается с помощью imagefill (). Однако он сохраняет фон прозрачности, в который он был загружен, и поэтому записывает эту часть png как прозрачную. Я попытался вызвать imagefill () для логотипа после его загрузки (используя тот же rgb, который устанавливает фон конечного изображения), но это ничего не дало.
Ниже мой код:
$background = $_GET['background'];
$data1 = $_GET['data1'];
$data2 = $_GET['data2'];
$r = $_GET['r'];
$g = $_GET['g'];
$b = $_GET['b'];
$png_image = imagecreate(400, 200);
$gd_text_color = imagecolorallocate($png_image, 255, 255, 255);
$gd_background_color = imagecolorallocate($png_image, $r, $g, $b);
imagefill($png_image, 0, 0, $gd_background);
$text1 = "test test $data1";
$text2 = "test test again $data2";
$font = 'Lato-regular.ttf';
imagettftext($png_image, 18, 0, 20, 20, $gd_text_color, $font, $text1);
imagettftext($png_image, 18, 0, 20, 50, $gd_text_color, $font, $text2);
//trying to get this logo and place it in the corner.
$logo = imagecreatefrompng("images/logo.png");
imagecopy($png_image, $logo, 10, 10, 0, 0, 100, 30);
header('Content-type: image/png');
imagepng($png_image, $filename);
imagedestroy($png_image);
Вот вывод этого кода: http://i.imgur.com/n25h9Js.png
А вот как выглядит изображение при загрузке в программу, которая принимает альфа-канал: http://i.imgur.com/3OIRupN.png
Кто-нибудь знает, как я добьюсь того, что пытаюсь сделать?
Спасибо за ваше время.
РЕДАКТИРОВАТЬ
Чтобы попытаться объяснить, что я хочу, вот другое изображение. Верхнее изображение — это то, что я сейчас получаю, а нижнее — то, что я хочу. Я просто пытаюсь загрузить прозрачный PNG, который может сидеть поверх разноцветного фона. Тем не менее, я понимаю, как это показано здесь (прозрачный фон) или как черный фон (потому что я думаю, что альфа-канал не просматривается?). Надеюсь это поможет. Образ:
Редактировать 2
Согласно комментарию ниже, я изменил его с imagecreate () на imagecreatetruecolor (), и теперь он работает отлично! Я хотел бы объяснить, почему это решило проблему, если у кого-то есть время, но сейчас, спасибо всем, кто прокомментировал или даже потратил ваше время на просмотр этого вопроса.
Я подозреваю, что ваш imagecreate()
может вызывать у вас проблемы, так как создает палитризованное изображение, которое не обладает гибкостью или широтой выражения изображения в истинном цвете.
Я предлагаю вам заменить его imagecreatetruecolor()
,
Других решений пока нет …