PHP将二维码及文字添加到指定图片
php通过第三方类可以很容易的将指定内容生成为二维码图片,那么如何将生成的二维码图片与指定的背景图片相结合并添加文字信息呢?
这里直接上代码:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
$dstPath = 'weixin.png'; $srcPath = 'qrcode.png'; //1.添加二维码到图片 $tmpfile = tempnam(sys_get_temp_dir(), 'dedemao'); $dstFile = picMerge($dstPath,$srcPath,165,225,0,0,100,$tmpfile); //2.添加文字到图片 $font = './hei.ttf'; //字体 $fontSize = 26; $text = '织梦猫网页设计工作室'; addFontToPic($dstFile,$font,$fontSize,$text,700); unlink($tmpfile); /** * 图片合并 * 将源图片覆盖到目标图片上 * @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; } /** * 添加文字到图片上 * @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; } |
最终效果如图:收款二维码被我处理了下: