如何通过PHP将3个图像合并为1个图像?

时间:2010-12-11 22:44:04

标签: php image merge gd

我真的找不到成功做到这一点的方法..我搜索谷歌这个,它或者在图像周围有黑色阴影或者所有图像都没有重叠。你能帮忙吗?

我对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 个答案:

答案 0 :(得分:11)

关于这个答案有很多评论,所以我将其作为答案发布。

让它在我的电脑上工作。

使用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);

?>

我将这些图片重命名为更容易:


微笑:a.png
耳机:b.png
blue:c.png

原来问题在于分层。把一个放在另一个

重命名图像后,使用此网址 - 它将起作用(在我的电脑上工作)。

YOUR_FILE.php帽子= b.png&安培;颜色= c.png&安培;面部= a.png

这仍然会给你一个黑色的背景。我不确定你在服务器上的文件中是否有与上面完全相同的代码 - 因为我在你的链接上玩了图像顺序并且没有帮助。尝试在不同的文件上复制粘贴这个完全相同的代码,然后尝试。玩弄订单并检查结果。

答案 1 :(得分:2)

这里有一些代码可以帮助您入门。但是你应该注意到使用gd和alpha通道的图像处理是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*函数)以确保它不会无声地失败。

我真的不能保证它会与alpha通道一起使用..如果不是,你可能不得不通过php.net上的imagecopymerge()imagecopy()查看评论,看看如果我错过了什么。