在PHP中合并两个图像

时间:2012-10-19 14:22:38

标签: php image image-processing gd

我正在构建一个可以设计内容的Web应用程序,在该过程结束时它会输出两个图像。一个是gif,另一个是jpeg。我希望拍摄两张图片并将它们合并为一张图片。然而,在尝试了一些技术后似乎没有工作。

我的脚本如下:

$imgl = $_GET['img1'];
$img2 = $_GET['img2'];


$dest = imagecreatefromjpeg('$imgl');
$src = imagecreatefromgif('$img2');

// Copy and merge
imagecopymerge($dest, $src, 10, 10, 0, 0, 100, 47, 75);

// Output and free from memory
header('Content-Type: image/gif');
imagegif($dest);

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

但是,显示的图像只显示非图像图标。变量$ img1和$ img2包含图像路径,指向图像存在的文件夹。我知道这是因为当我在html img标签中回显两个变量时,会显示两个图像。谁能告诉我我的剧本哪里出错?

3 个答案:

答案 0 :(得分:1)

您应该删除单引号。它们阻止PHP查找字符串中的变量。有关PHP中引号用法的更多信息,请查看here

意思是:

$dest = imagecreatefromjpeg($imgl);
$src = imagecreatefromgif($img2);

此外,您应该检查是否要允许操作图像。 您允许知道GET参数名称的每个人将可能的恶意文件路径放入其中。你不能阻止这种情况。

有用的功能是realpathbasenamefile_exists

答案 1 :(得分:1)

我知道你的例子直接用于PHP DOC,但我也对它进行了测试,它对我不起作用..稍微解决它应该有效

$imgl = "a.jpg";
$img2 = "f.gif";

$dest = imagecreatefromjpeg($imgl);
$src = imagecreatefromgif($img2);
imagecolortransparent($src, imagecolorat($src, 0, 0));

$src_x = imagesx($src);
$src_y = imagesy($src);
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100);

// Output and free from memory
header('Content-Type: image/gif');
imagegif($dest);

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

答案 2 :(得分:0)

不是100%确定这会解决您的问题,但肯定是语法错误。这样:

$dest = imagecreatefromjpeg('$imgl');
$src = imagecreatefromgif('$img2');

应该是:

$dest = imagecreatefromjpeg($imgl);
$src = imagecreatefromgif($img2);

您想要传递$ img1和$ img2的值,而不是文字字符串'$img1''$img2'