1

我正在构建一个 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 标签中回显这两个变量时,两个图像都会显示。谁能告诉我我的脚本哪里出错了?

4

3 回答 3

1

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

方法:

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

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

有用的函数是realpathbasenamefile_exists

于 2012-10-19T14:31:33.193 回答
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);
于 2012-10-19T14:36:37.420 回答
0

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

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

应该:

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

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

于 2012-10-19T14:31:37.377 回答