【问题标题】:Attempting to merge a png over a jpg using PHP尝试使用 PHP 在 jpg 上合并 png
【发布时间】:2013-11-21 02:09:44
【问题描述】:

我正在尝试使用 PHP 合并两个图像。一个是我以 Facebook URL 的形式提取的 jpg,另一个是“水印”标志,它是一个 png,我希望在将图像发布回 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);            }

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

【问题讨论】:

  • 两件事 - 您是否在文本中获得“资源 ID...”?你的真实代码中真的有“$function”吗?
  • $Function 是一个错字,我已经进行了编辑。我得到:资源 id #14 当我: print_r($dest);在 imagecopyresampled() 之后
  • 没错 - $dest 是资源 ID,无法打印。图片应由imagejpeg() 输出 - 见Example #1
  • 啊,这很有道理。我认为它可能会返回创建的文件名。我现在使用 imagejpeg 创建图像,但 png 没有覆盖,它输出原始 JPG 的未编辑版本。我认为问题在于 imagecopyresampled() $src2x, $src2y, 0, 0, $src2w, $src2h, $src2w 等中的变量没有被声明。我只是从stackoverflow.com/questions/15035632/… 的示例中获取它们

标签: php merge png jpeg


【解决方案1】:

好的,我得到了这个工作。我的第一个问题是我对 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);

如果有人可以发表评论以改进此代码,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2013-02-24
    • 2011-01-17
    • 2012-12-21
    • 2010-11-15
    相关资源
    最近更新 更多