php通过第三方类可以很容易的将指定内容生成为二维码图片,那么如何将生成的二维码图片与指定的背景图片相结合并添加文字信息呢?
1、图片合并
/**
* 图片合并
* 将源图片覆盖到目标图片上
* @param string $dstPath 目标图片路径
* @param string $srcPath 源图片路径
* @param int $dstX 源图片覆盖到目标的X轴坐标
* @param int $dstY 源图片覆盖到目标的Y轴坐标
* @param int $srcX
* @param int $srcY
* @param int $pct 透明度
* @param string $filename 输出的文件名,为空则直接在浏览器上输出显示
* @return string $filename 合并后的文件名
*/
function picMerge($dstPath,$srcPath,$dstX=0,$dstY=0,$srcX=0,$srcY=0,$pct=100,$filename='')
{
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dstPath));
$src = imagecreatefromstring(file_get_contents($srcPath));
//获取水印图片的宽高
list($src_w, $src_h) = getimagesize($srcPath);
//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果
imagecopymerge($dst, $src, 165, 225, 0, 0, $src_w, $src_h, 100);
//如果水印图片本身带透明色,则使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dstPath);
switch ($dst_type) {
case 1://GIF
if(!$filename){
header('Content-Type: image/gif');
imagegif($dst);
}else{
imagegif($dst,$filename);
}
break;
case 2://JPG
if(!$filename){
header('Content-Type: image/jpeg');
imagejpeg($dst);
}else{
imagejpeg($dst,$filename);
}
break;
case 3://PNG
if(!$filename){
header('Content-Type: image/png');
imagepng($dst);
}else{
imagepng($dst,$filename);
}
break;
default:
break;
}
imagedestroy($dst);
imagedestroy($src);
return $filename;
}
2、文字添加
/**
* 添加文字到图片上
* @param $dstPath 目标图片
* @param $fontPath 字体路径
* @param $fontSize 字体大小
* @param $text 文字内容
* @param $dstY 文字Y坐标值
* @param string $filename 输出文件名,为空则在浏览器上直接输出显示
* @return string 返回文件名
*/
function addFontToPic($dstPath,$fontPath,$fontSize,$text,$dstY,$filename='')
{
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dstPath));
//打上文字
$fontColor = imagecolorallocate($dst, 0x00, 0x00, 0x00);//字体颜色
$width = imagesx ( $dst );
$height = imagesy ( $dst );
$fontBox = imagettfbbox($fontSize, 0, $fontPath, $text);//文字水平居中实质
imagettftext ( $dst, $fontSize, 0, ceil(($width - $fontBox[2]) / 2), $dstY, $fontColor, $fontPath, $text);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dstPath);
switch ($dst_type) {
case 1://GIF
if(!$filename){
header('Content-Type: image/gif');
imagegif($dst);
}else{
imagegif($dst,$filename);
}
break;
case 2://JPG
if(!$filename){
header('Content-Type: image/jpeg');
imagejpeg($dst);
}else{
imagejpeg($dst,$filename);
}
break;
case 3://PNG
if(!$filename){
header('Content-Type: image/png');
imagepng($dst);
}else{
imagepng($dst,$filename);
}
break;
default:
break;
}
imagedestroy($dst);
return $filename;
}
最后效果(图片中的二维码和下方的文字信息都是添加上去的):