Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中合并两个图像_Php_Image_Image Processing_Gd - Fatal编程技术网

在PHP中合并两个图像

在PHP中合并两个图像,php,image,image-processing,gd,Php,Image,Image Processing,Gd,我正在构建一个web应用程序,您可以在其中设计一些东西,在过程结束时,它会输出两个图像。一个是gif,另一个是jpeg。我期待着采取两个图像和合并成一个图像他们。然而,在尝试了一些技术之后,似乎没有一种有效 我的脚本如下: $imgl = $_GET['img1']; $img2 = $_GET['img2']; $dest = imagecreatefromjpeg('$imgl'); $src = imagecreatefromgif('$img2'); // Copy and mer

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

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

指:

$dest = imagecreatefromjpeg($imgl);
$src = imagecreatefromgif($img2);
此外,还应检查是否允许操纵图像。 您允许知道GET参数名称的所有人将可能的恶意文件路径放入其中。你不能阻止这一切


有用的函数是,和。

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

$dest = imagecreatefromjpeg('$imgl');
$src = imagecreatefromgif('$img2');
应该是:

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

您希望传递$img1和$img2的值,而不是文本字符串
'$img1'
'$img2'

我知道您的示例是直接用于的,但我也测试了它,它对我不起作用。。只要稍加努力,它就会起作用

$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);

你想做水印吗?嗯。。从某种意义上说,是的,它有两个图像,它们有透明的部分,所以当一个放在另一个上面时,它会显示它们的一部分。我只是想把这两个图像变成一个图像。这不是语法错误,而是语义错误。语法错误导致运行时错误。是,我可以为您添加图片输出否,不需要。这样就行了,当我把它打印出来时,我有一个典型的例子谢谢。有没有办法在新图像输出时保持两张原始图像的透明度?如果这有意义,请使用
imagealphabling($dest,false)
imagesavealpha($dest,true)