尝试使用PHP将png合并到jpg上

时间:2013-11-21 02:09:45

标签: php merge png jpeg

我正在尝试使用PHP合并两个图像。一个是我以Facebook网址形式提取的jpg,另一个是“水印”徽标,我希望在将图像发回Facebook之前应用于Facebook图像的右下角。

我在合并这两张图片时遇到了麻烦。下面的函数传递Facebook图像的URL(这是一个jpg)$ imagedata = Facebook图像URL。该函数当前正在返回:资源ID#1。我希望将合并后的图像保存为/ uploads /文件夹,与之前随机生成的文件名相同,并从函数中返回它的位置。

我之前已经引用过这个页面: Merge a png ontop of a jpg and retain transparency with php

function createImage($imagedata) {

    $upload_dir = ($_SERVER['DOCUMENT_ROOT'] .'/uploads/');

    $filename =generateFilename().'.jpg'; //generateFilename() does nothing more than create a random string to use as a unique filename

    $filelocation=$upload_dir . $filename;

    file_put_contents($filelocation,file_get_contents($imagedata));

    $localimage = $filename;

    $dest = imagecreatefromjpeg('/uploads/' . $localimage);

    $src = imagecreatefrompng('images/overlay.png');

    imagecopyresampled($dest, $src, $src2x, $src2y, 0, 0, $src2w, $src2h, $src2w, $src2h); 

    //header('Content-Type: image/png');

    imagejpeg($dest, 'dickshlitz.jpg', 100);

    imagedestroy($dest);

    imagedestroy($src);            }

非常感谢任何和所有帮助。如果我不够清楚,请提问。

1 个答案:

答案 0 :(得分:0)

好的,我有这个工作。我的第一个问题是我对imagecopyresampled()的输出感到困惑,因为我试图打印它,这不是它的设计目的。在发布初始问题时,我没有注意到.jpg文件正在输出到我的服务器,所以代码确实已经完成了它的工作。

然而,一旦我注意到输出并检查了它,我发现它没有按预期运行。这是我不理解imagecopyresampled()并传递未声明的变量的错误。经过多次修补后,工作代码如下。

$dest = imagecreatefromjpeg('background.jpg');
$src = imagecreatefrompng('watermark.png');

    imagesavealpha($src, true); 
    imagealphablending($src, true);
    imagesavealpha($dest, true); 
    imagealphablending($dest, true);
    list($newwidth, $newheight, $type, $attr) = getimagesize('overlay.png');

    imagecopyresampled($dest, $src, 200 , 100, 0, 0, $newwidth , $newheight, $newwidth , $newheight); 

    imagepng($dest, $localimage);

    imagedestroy($dest);
    imagedestroy($src);

如果有人可以提出改进此代码,我将不胜感激。