Я действительно не могу найти способ успешно это сделать .. Я искал Google для этого, и он либо имеет черные оттенки вокруг изображений, либо все изображения не перекрываются. Не могли бы вы помочь?
Я в порядке на PHP; Я бы отдал себе 2/5. Я бы очень признателен, если кто-то захочет помочь мне.
Я ищу простой api, который выглядит примерно так:
$color=$_GET['color']; $face=$_GET['face']; $hat=$_GET['hat']; echo '<img src="avatar.php?color=$color&face=$face&hat=$hat">';
Спасибо за любую помощь заранее. Я могу понять php из моего знания других языков, так что не бойтесь говорить со мной технически; но не слишком техничным.
есть так много комментариев на этот ответ, поэтому я отправляю это как ответ.
Получил это, работая на моем компьютере.
используйте код svens:
$images = array( $_GET['color'], $_GET['face'], $_GET['hat'] ); // Allocate new image $img = imagecreatetruecolor(58, 75); // Make alpha channels work imagealphablending($img, true); imagesavealpha($img, true); foreach($images as $fn) { // Load image $cur = imagecreatefrompng($fn); imagealphablending($cur, true); imagesavealpha($cur, true); // Copy over image imagecopy($img, $cur, 0, 0, 0, 0, 58, 75); // Free memory imagedestroy($cur); } header('Content-Type: image/png'); // Comment out this line to see PHP errors imagepng($img); ?>
Я переименовал ваши изображения так, чтобы это было проще:
smile: a.png
гарнитура: b.png
синий: c.png
Оказывается, проблема заключается в ее разбиении. Помещение одного за другим
после того, как вы переименуете изображения, используйте этот url – он будет работать (работает на моем компьютере).
YOUR_FILE.php? Шляпа = b.png & цвет = c.png и лицо = a.png
Это все равно даст вам черный фон. Я не уверен, что у вас есть тот же самый код, что и выше, в вашем файле на сервере – потому что я играл с порядком изображения по вашей ссылке, и это не помогает. Попробуйте скопировать этот точный код в другой файл, а затем попробовать. Поиграйте с заказом и проверьте результаты.
Вот вам какой-то код, чтобы вы начали. Однако следует отметить, что обработка изображений с помощью gd и альфа-каналов – это voodoo.
<?php $images = array( $_GET['color'], $_GET['face'], $_GET['hat'] ); // Allocate new image $img = imagecreatetruecolor(58, 75); // Make alpha channels work imagealphablending($img, true); imagesavealpha($img, true); foreach($images as $fn) { // Load image $cur = imagecreatefrompng($fn); imagealphablending($cur, true); imagesavealpha($cur, true); // Copy over image imagecopy($img, $cur, 0, 0, 0, 0, 58, 75); // Free memory imagedestroy($cur); } header('Content-Type: image/png'); // Comment out this line to see PHP errors imagepng($img); ?>
Теперь вам нужно проверить возвращаемые значения (посмотреть в функциях image*
в руководстве), чтобы убедиться, что он не сработает молча.
Я не могу пообещать, что он будет работать с альфа-каналами. Если нет, вам, вероятно, придется просмотреть комментарии к imagecopymerge()
или imagecopy()
на php.net и посмотреть, не пропустил ли я что-то.