我正在构建一个可以设计内容的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标签中回显两个变量时,会显示两个图像。谁能告诉我我的剧本哪里出错?
答案 0 :(得分:1)
您应该删除单引号。它们阻止PHP查找字符串中的变量。有关PHP中引号用法的更多信息,请查看here。
意思是:
$dest = imagecreatefromjpeg($imgl);
$src = imagecreatefromgif($img2);
此外,您应该检查是否要允许操作图像。 您允许知道GET参数名称的每个人将可能的恶意文件路径放入其中。你不能阻止这种情况。
有用的功能是realpath,basename和file_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'
。