Как я могу объединить 3 изображения в 1 изображение через PHP? - PullRequest
6 голосов
/ 12 декабря 2010

Я действительно не могу найти способ успешно это сделать .. Я искал в 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 из моего знания других языков, так что не бойтесь говорить со мной по-технически;но не слишком технический.

Ответы [ 2 ]

11 голосов
/ 12 декабря 2010

так много комментариев к этому ответу, поэтому я публикую это как ответ.

На моем компьютере все работает.

используйте код 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

Это все равно даст вам черный фон. Я не уверен, что у вас есть тот же код, что и выше, в вашем файле на сервере - потому что я поиграл с порядком изображений в вашей ссылке, и это не помогло. Попробуйте скопировать этот же код в другой файл, а затем попробуйте. Поиграйте с заказом и проверьте результаты.

2 голосов
/ 12 декабря 2010

Вот код, с которого можно начать. Однако следует помнить, что обработка изображений с помощью 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 и посмотреть, пропустил ли я что-то .

...