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


Attempting to merge a png over a jpg using PHP

我正在尝试使用PHP合并两个图像。一个是我以Facebook URL的形式提取的jpg,另一个是"水印"标志,这是一个png,我希望在将图像发布回Facebook之前,将其应用于Facebook图像的右下角。

我在合并这两个图像时遇到问题。下面的函数传递了Facebook图像的url(jpg)$imagedata=Facebook图像的url。函数当前正在返回:资源id#1。我希望将合并后的图像保存到/uploads/文件夹中,作为之前随机生成的文件名,并从函数中返回其位置。

我之前曾引用过此页面:合并jpg的png ontop并使用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);            }

我们非常感谢您的任何帮助。如果我不够清楚,请提问。

好的,我开始工作了。我的第一个问题是,我对imagecopyrasampled()的输出感到困惑,因为我正试图打印它,而这不是它的设计目的。在发布最初的问题时,我没有注意到.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);

如果有人能为改进这段代码做出贡献,我将不胜感激。