Я пытаюсь создать изображения из динамических текстовых данных в GD и поместить логотип в верхний угол. Фоновый цвет изображения изменится на основе данных, переданных, поэтому я не могу просто сохранить логотип как изображение без альфа-канала.Загрузите прозрачный png в gd php, но не делайте его прозрачным фоном
Я создаю изображение, залейте его динамическим цветом фона с помощью 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
ли кто-нибудь знаете, как я достиг бы того, что я пытаюсь?
Спасибо за ваше время.
EDIT
Чтобы попытаться объяснить, что я хочу здесь другое изображение. Главное изображение - это то, что я сейчас получаю, и нижнее изображение - это то, что я хочу. Я просто пытаюсь загрузить прозрачный PNG, который может сидеть на столе разных цветных фонов. Однако я либо получаю это, как показано здесь (прозрачный фон), либо как черный фон (потому что, на мой взгляд, альфа-канал не рассматривается?). Надеюсь это поможет. Изображение:
Edit 2
В соответствии с комментарием ниже, я изменил его от ImageCreate() до imagecreatetruecolor(), и теперь он работает отлично! Мне хотелось бы объяснить, почему это разрешило это, если у кого есть время, но пока, спасибо всем, кто прокомментировал или даже потратил ваше время на этот вопрос.
Я не уверен, что вы действительно пытаетесь сделать - хотите ли вы, чтобы окончательное изображение имело какую-либо прозрачность или нет. Однако ваш 'imagecreate()' может вызывать проблемы, поскольку он создает изображение на паллетах - возможно, вам нужно 'imagecreatetruecolour()'. –
imagecreatetruecolor (не британская версия!) –
Я пытаюсь создать изображение, которое не имеет прозрачности, правильно. Я предполагаю, что мое объяснение сбивает с толку, поэтому у меня будет другой ход: фоновый цвет финального изображения будет зависеть от входных данных, поэтому я не могу просто создать «логотип» с тем же фоновым цветом конечного изображения. Поэтому я загружаю его как PNG с прозрачностью. Я надеюсь «поместить» его в верхнем левом углу, чтобы он сидел на столе динамического цвета фона, однако GD делает эту часть изображения прозрачной, чего я не хочу. Я включил скриншот в главном сообщении, показывающий, что у меня есть и что я хочу. – poncho