php 合成图片

图片合成,最常见的就是自动生成如海报等需求场景,php 本身有一个函数 imagecopymerge 可以满足我们的需求

1
2
3
4
5
6
7
8
9
10
11
imagecopymerge(
GdImage $dst_image,
GdImage $src_image,
int $dst_x,
int $dst_y,
int $src_x,
int $src_y,
int $src_width,
int $src_height,
int $pct
): bool

这个函数实现过程为:

从 x、y 坐标 src_x、src_y 开始,将 src_image 的一部分复制到 dst_image 上,宽度为 src_width,高度为 src_height。定义的部分将被复制到 x、y 坐标 dst_x 和 dst_y 上。

其中一个参数 pct 表示:

两个图像将根据 pct 合并,范围是 0 到 100。当 pct = 0,不采取任何操作,当 100 时,此函数的行为与调色板图像的 imagecopy() 相同,除了忽略 alpha alpha 组件(components),其实现了真彩色图像的 alpha 透明度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$bigImgPath = 'backgroud.png';
$qCodePath = 'qcode.png';
$bigImg = imagecreatefromstring(file_get_contents($bigImgPath));
$qCodeImg = imagecreatefromstring(file_get_contents($qCodePath));
list($qCodeWidth, $qCodeHight, $qCodeType) = getimagesize($qCodePath);

imagecopymerge($bigImg, $qCodeImg, 200, 300, 0, 0, $qCodeWidth, $qCodeHight, 100);
list($bigWidth, $bigHight, $bigType) = getimagesize($bigImgPath);
switch ($bigType) {
case 1: //gif
header('Content-Type:image/gif');
imagegif($bigImg);
break;
case 2: //jpg
header('Content-Type:image/jpg');
imagejpeg($bigImg);
break;
case 3: //jpg
header('Content-Type:image/png');
imagepng($bigImg);
break;
default:
# code...
break;
}
imagedestroy($bigImg);
imagedestroy($qcodeImg);