900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > PHP实现随机生成水印图片功能的示例代码分享

PHP实现随机生成水印图片功能的示例代码分享

时间:2020-01-11 11:16:19

相关推荐

PHP实现随机生成水印图片功能的示例代码分享

后端开发|php教程

PHP,随机生成,水印图片

后端开发-php教程

这篇文章主要为大家详细介绍了PHP生成随机水印图片的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

轻门户 源码,vscode卸载模块指令,ubuntu的livecd,java监控tomcat,ecos sqlite,网页设计和前端,网站如何上传数据库,服务器需要做哪些认证,前端导出excel插件,前端框架vue视频教程全集交流,爬虫txml,php教,福州seo外包,springboot启动义,页面中两个h1标签好吗 seo,asp服装网站源码,上传下载网页,phpcms后台模板在哪里,web后台开发教程,日历展示 页面,网站后台管理系统进入,西门子程序代码lzw

基于PHP的GD图形库,自己生成一张图片。仅限初识GD库,实例学习。

局域网通讯软件 源码,vscode注释翻译插件,切换ubuntu显卡,项目加入tomcat报错,sqlite应用在什么地方,猫影视爬虫接口资源都是一样的吗,php 源码结构,页面如何支持seo,帝国cms生成网站地图,网页书架风格模板lzw

A、需求

照片浏览源码,ubuntu 安卓sdk,http权威指南 爬虫,PHP防止修改同一条数据,曹操博客seolzw

网站的布局用到了类似慕课网课程列表的风格,每一个课程是一个banner图,图下面是标题加简介。因为课程的数量较大没有为所有的课程设计专门的banner,所以需要按照一定的规则,来自己生成图片(本打算用p布局来解决,但p+img在响应式布局中不是很好控制)。

生成的效果图:

B、工具&素材

1.PHP开启GD图形库扩展

2.准备多个小的水印图

3.获取预生成图片的背景色RGB值

C、代码

生成图片的过程,代码中做了详细的注释。

class GenerateRandomImage{ /** @var integer 图片宽度 */ public $imgWidth = 272; /** @var integer 图片高度 */ public $imgHeight = 162; /** @var 根据type不同来生成不同的背景颜色,目前留个type分别为蓝色、紫色、黄色、绿色、灰色、土黄色 */ public $type = \; /** @var 图片上要显示的文字 */ public $text = \; /** @var integer 图片上文字的字体大小 */ public $fontSize = 16; public function construct($type, $text) { $this->type = $type; $this->text = $text; } /** * 创建生成随机图片 * @author bignerd * @since -03-21T14:49:41+0800 */ public function createImg() { /** @var 创建一个指定图片大小的空调色板 $image = imagecreate($this->imgWidth, $this->imgHeight); $rgb = $this->getBackground($this->type); /** @var 为图片创建一个背景色 */ $backgroundColor = imagecolorallocate($image, $rgb[ ], $rgb[g], $rgb[]); /** @var 创建文字白色字体 */ $textColor = imagecolorallocate($image, 255, 255, 255); /** @var 字体文件路径 */ $font = $_SERVER[DOCUMENT_ROOT]./public/font/simhei.ttf; $x = 18;//文字起始位置x坐标 $y = 50;//文字起始位置y坐标 /** 文字写入图片 */ $angle = 0;//角度0 imagettftext($image, $this->fontSize, $angle, $x, $y, $textColor, $font, $this->text); /** @var 水印图片路径 **/ $waterImgPath = $this->randWaterImage(); /** @var 获取图片信息,返回值$waterInfo[2] 为图片类型常量 */ $waterInfo = getimagesize($waterImgPath); /** @var 将图片类型常量转换为真正的类型,如png */ $waterType = image_type_to_extension($waterInfo[2], false);//获取文件类型 $createImageFunc = imagecreatefrom.$waterType; /** @var 创建一个水印图片的副本 $createImageFunc 为根据图片类型来动态生成预调用的创建图片函数*/ $mask = $createImageFunc($waterImgPath); $posX = $this->imgWidth - $waterInfo[0];//水印图片,在目标图片中的位置的x坐标 $posY = $this->imgHeight - $waterInfo[1];//水印图片,在目标图片中的位置的y坐标 /** http请求响应类型设置为 image/png 以便直接显示为图片 */ header("Content-Type:image/png"); /** 水印图片复制到创建的image */ imagecopy($image, $mask, $posX, $posY, 0, 0, $waterInfo[0], $waterInfo[1]); imagepng($image);//输入图片到浏览器或者文件 imagedestroy($image);//销毁图片 } /** * 图片背景颜色的rgb值 * @author bignerd * @since -03-21T14:50:16+0800 */ public function getBackground() { $background = [1=>[ =>0, g=>160,=>233],2=>[ =>198,g=>0, =>110],3=>[ =>237,g=>109,=>0],4=>[ =>33, g=>148,=>75],5=>[ =>63, g=>58, =>57], 6=>[ =>202,g=>162,=>101], ]; return $background[$this->type]; } /** * 随机水印图片路径 * @author bignerd * @since -03-21T14:51:00+0800 * @return 路径 */ public function randWaterImage() { $folder = [1=>product,2=> eam,3=>architecture,4=>developer,5=> est,6=>engineer ]; $targetFolder = $_SERVER[DOCUMENT_ROOT]./public/images/role/.$folder[$this->type]./.rand(1,38)..jpg; return $targetFolder; }}$image = new GenerateRandomImage(1,"扛得住的MySql数据架构");$image->createImg();

这样我们就可以直接在页面中使用来直接显示图片。

注意:过程中遇到过一个问题:如果水印图片是透明的png图片,那将水印图片复制到image中时,会显示为白色背景,与我们设定 的image背景无法透明融合,所以对随机的水印图片也需要做同样的颜色处理。

D、总结

这个小示例用简单的步骤来生成一张图片,直接显示在浏览器,也可以给imagepng加第二参数,也就是路径,以保存图片。所以学会示例中的几个GD库中的方法,就可以实现创建图片、为图片添加文字水印、或图片水印。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。