PHP 实现水印图片生成

可以用phpqrcode配合生成二维码带文字

目录

一、字体文件

二、使用

1.效果

2.代码参考

总结


一、字体文件

生成字体需要用到字体文件,放在百度网盘中有需要可以自行取用:

https://pan.baidu.com/s/1BMhvW-m4HTYhAVCj7guLWw 提取码:isvp

二、使用

1.效果

2.代码参考

        // 生成二维码存储路径$erweimaPath       = getcwd() . '/static/文件夹路径/';// 二维码最终合成图的文件路径/名字$sFullPath  = $erweimaPath . $sFileName;//文字+背景图合成后存储的路径$font+blackPath    = getcwd()  . '/static/文件夹路径/';// 背景图路径$backPath          = getcwd() . '/static/文件夹路径/back.png';// 文件存储名字$sFileName  ='这是举例的文件名字'. '.png';// 二维码+文字+背景图合成最终需要图片后的存储路径$erweima+font+back = getcwd() . '/static/文件夹路径/';// 需要的文字$text     = '我的店铺';// 判断一下如果最终图片存在就不再生成了直接返回现有图片if (\file_exists($sFullPath) === false) {1:合成文字和背景图// 获取背景图片信息  - 如果没有可以生成一张背景图$backInfo = getimagesize($backPath);// 获取图片扩展名$type = image_type_to_extension($backInfo[2], false);// 动态导入内存$fun   = "imagecreatefrom{$type}";$image = $fun($backPath);// 背景宽度$bgWidth = imagesx($image);// 背景高度$bgHeight = imagesy($image);// 导入字体文件// linux 路径导入方法$font =  getcwd() . '/static/PingFangMedium.ttf';// windows 路径导入方法// $font = dirname(__FILE__) . '/PingFangMedium.ttf';//获取文字所需的尺寸大小 $fontBox = imagettfbbox(50, 0, $font, $text);// 背景颜色$black = imagecolorallocate($image, 0, 0, 0);//生成的文件名$haibao_filename = $font+blackPath . $sFileName;// 写入文字,文字大小、旋转率、X坐标(根据背景图宽让文字居中)、Y坐标imagettftext($image, 50, 0, ceil(($bgWidth - $fontBox[2]) / 2), 1150, $black, $font, $text);// 输出到目标文件imagepng($image, $haibao_filename);2:合成带文字背景图和二维码// 二维码携带的内容(链接,文字等...)$sHttpUrl     = "content";// 收款码携带的内容$value        = $sHttpUrl;// 容错率$level        = 'L';// 二维码大小$size         = 22;// 生成二维码QRcode::png($value, $sFullPath, $level, $size, 2);// 获取保存的带文字的背景图$backImg   = imagecreatefrompng($haibao_filename);// 获取保存的二维码路径$qrcodeImg = imagecreatefrompng($sFullPath);// 合成图片imagecopymerge($backImg, $qrcodeImg, 160, 260, 0, 0, imagesx($qrcodeImg), imagesy($qrcodeImg), 100);// 图片保存地址$strQrcodeBackPath = $erweima+font+back . $sFileName;// 输出合成图片imagepng($backImg, $strQrcodeBackPath);}// 图片存在就不再生成了直接返回现有图片$simgPath = \base_url() . '/static/erweima+font+back(文件夹中)/' . $sFileName . '?r=' . time();return $sCodePath;


总结

有几点需要注意的分享一下:

1:字体文件的路径(只能放在同级目录里面不然会找不到【我是放在控制器目录里面的】)

2:liunx 和 windows 引入字体的方式不同(当时这个问题一直在liunx上报错找不到字体,还是挺困扰人的)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部