当前位置:网站首页> PHP利用ueditor实现上传图片添加水印
PHP利用ueditor实现上传图片添加水印
2022-07-05 19:00:00 【1024问】
博客在上传图片的时候,我希望能打上我博客链接的水印,掘金,csdn都是这么干的,这事我得学习。
平时的图片上传还好说,在文章编辑的时候,使用ueditor上传图片加水印需要修改ueditor部分PHP的源码,我这里大概记录一下。
首先打开php文件夹下的Uploader.class.php
找到private function upFile(),这是上传文件的主处理方法,
找到122行: $this->stateInfo = $this->stateMap[0];
在这个下面加入:$this->imageWaterMark($this->filePath,9,'logo.png');
imageWaterMark是自定义的函数,
在下面会说到,$this->filePath 这是上传图片的路径,9 表示的是水印的位置,在右下角,logo.png这个就是你要添加的水印图片了,这个在同一目录下/php/,如果要放到其它路径请用相对路径。
下面这个就是自定义函数了,添加到Uploader 类中 所有的参数都已在函数注释中说明,调用的时候需要注意一下
/* * 功能:PHP图片水印 (水印支持图片或文字) * 参数: *$groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; *$waterPos水印位置,有10种状态,0为随机位置; *1为顶端居左,2为顶端居中,3为顶端居右; *4为中部居左,5为中部居中,6为中部居右; *7为底端居左,8为底端居中,9为底端居右; *$waterImage图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; *$waterText文字水印,即把文字作为为水印,支持ASCII码,不支持中文; *$textFont文字大小,值为1、2、3、4或5,默认为5; *$textColor文字颜色,值为十六进制颜色值,默认为#FF0000(红色); * 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG *$waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。 *当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。 *加水印后的图片的文件名和 $groundImage 一样。 */ private function imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$textFont=5,$textColor="#FF0000") { $isWaterImage = FALSE; $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。"; //读取水印文件 if(!empty($waterImage) && file_exists($waterImage)) { $isWaterImage = TRUE; $water_info = getimagesize($waterImage); $water_w = $water_info[0];//取得水印图片的宽 $water_h = $water_info[1];//取得水印图片的高 switch($water_info[2])//取得水印图片的格式 { case 1:$water_im = imagecreatefromgif($waterImage);break; case 2:$water_im = imagecreatefromjpeg($waterImage);break; case 3:$water_im = imagecreatefrompng($waterImage);break; default:die($formatMsg); } } //读取背景图片 if(!empty($groundImage) && file_exists($groundImage)) { $ground_info = getimagesize($groundImage); $ground_w = $ground_info[0];//取得背景图片的宽 $ground_h = $ground_info[1];//取得背景图片的高 switch($ground_info[2])//取得背景图片的格式 { case 1:$ground_im = imagecreatefromgif($groundImage);break; case 2:$ground_im = imagecreatefromjpeg($groundImage);break; case 3:$ground_im = imagecreatefrompng($groundImage);break; default:die($formatMsg); } } else { die("需要加水印的图片不存在!"); } //水印位置 if($isWaterImage)//图片水印 { $w = $water_w; $h = $water_h; $label = "图片的"; } else//文字水印 { $temp = imagettfbbox(ceil($textFont*5),0,"./cour.ttf",$waterText);//取得使用 TrueType 字体的文本的范围 $w = $temp[2] - $temp[6]; $h = $temp[3] - $temp[7]; unset($temp); $label = "文字区域"; } if( ($ground_w<$w) || ($ground_h<$h) ) { echo "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!"; return; } switch($waterPos) { case 0://随机 $posX = rand(0,($ground_w - $w)); $posY = rand(0,($ground_h - $h)); break; case 1://1为顶端居左 $posX = 0; $posY = 0; break; case 2://2为顶端居中 $posX = ($ground_w - $w) / 2; $posY = 0; break; case 3://3为顶端居右 $posX = $ground_w - $w; $posY = 0; break; case 4://4为中部居左 $posX = 0; $posY = ($ground_h - $h) / 2; break; case 5://5为中部居中 $posX = ($ground_w - $w) / 2; $posY = ($ground_h - $h) / 2; break; case 6://6为中部居右 $posX = $ground_w - $w; $posY = ($ground_h - $h) / 2; break; case 7://7为底端居左 $posX = 0; $posY = $ground_h - $h; break; case 8://8为底端居中 $posX = ($ground_w - $w) / 2; $posY = $ground_h - $h; break; case 9://9为底端居右 $posX = $ground_w - $w - 10; // -10 是距离右侧10px 可以自己调节 $posY = $ground_h - $h - 10; // -10 是距离底部10px 可以自己调节 break; default://随机 $posX = rand(0,($ground_w - $w)); $posY = rand(0,($ground_h - $h)); break; } //设定图像的混色模式 imagealphablending($ground_im, true); if($isWaterImage)//图片水印 { imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件 } else//文字水印 { if( !emptyempty($textColor) && (strlen($textColor)==7) ) { $R = hexdec(substr($textColor,1,2)); $G = hexdec(substr($textColor,3,2)); $B = hexdec(substr($textColor,5)); } else { die("水印文字颜色格式不正确!"); } imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B)); } //生成水印后的图片 @unlink($groundImage); switch($ground_info[2])//取得背景图片的格式 { case 1:imagegif($ground_im,$groundImage);break; case 2:imagejpeg($ground_im,$groundImage);break; case 3:imagepng($ground_im,$groundImage);break; default:die($errorMsg); } //释放内存 if(isset($water_info)) unset($water_info); if(isset($water_im)) imagedestroy($water_im); unset($ground_info); imagedestroy($ground_im); }
好啦,这个就好用了。上传图片加水印就好用了。
请注意:水印功能需要用到GD库模块,请检查下php是否安装了GD库模块。
到此这篇关于PHP利用ueditor实现上传图片添加水印的文章就介绍到这了,更多相关PHP上传图片添加水印内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- 2022 Alibaba Android advanced interview questions sharing, 2022 Alibaba hand Taobao Android interview questions
- XML basic knowledge concept
- C# 语言的基本语法结构
- CF: B. almost Ternary Matrix [symétrie + règles de recherche + Construction + I am Construction Waste]
- The monthly list of Tencent cloud developer community videos was released in May 2022
- What are the reliable domestic low code development platforms?
- Benefits of automated testing
- Shang Silicon Valley Shang preferred project tutorial release
- 公司破产后,黑石们来了
- Summary of six points of MySQL optimization
猜你喜欢
The basic grammatical structure of C language
2022全网最全的腾讯后台自动化测试与持续部署实践【万字长文】
Interviewer: what is the difference between redis expiration deletion strategy and memory obsolescence strategy?
After the company went bankrupt, the blackstones came
#夏日挑战赛#数据库学霸笔记,考试/面试快速复习~
如何快速进阶自动化测试?听听这3位BAT大厂测试工程师的切身感想....
Fuzor 2020 software installation package download and installation tutorial
618“低调”谢幕,百秋尚美如何携手品牌跨越“不确定时代”?
cf:B. Almost Ternary Matrix【对称 + 找规律 + 构造 + 我是构造垃圾】
Advanced application of C # language
随机推荐
Can Leica capture the high-end market offered by Huawei for Xiaomi 12s?
Simple query cost estimation
紧固件行业供应商绩效考核繁琐?选对工具才能轻松逆袭!
The road of enterprise digital transformation starts from here
2022 Alibaba Android advanced interview questions sharing, 2022 Alibaba hand Taobao Android interview questions
14、用户、组和权限(14)
Golang through pointer for Range implements the change of the value of the element in the slice
Thoroughly understand why network i/o is blocked?
How to quickly advance automated testing? Listen to the personal feelings of the three bat test engineers
HAC cluster modifying administrator user password
Decision tree and random forest
After the company went bankrupt, the blackstones came
Django使用mysqlclient服务连接并写入数据库的操作过程
图扑软件数字孪生 | 基于 BIM 技术的可视化管理系统
cf:B. Almost Ternary Matrix【对称 + 找规律 + 构造 + 我是构造垃圾】
cf:B. Almost Ternary Matrix【對稱 + 找規律 + 構造 + 我是構造垃圾】
Go语言 | 02 for循环及常用函数的使用
618“低调”谢幕,百秋尚美如何携手品牌跨越“不确定时代”?
Go语言学习教程(十五)
Icml2022 | partial and asymmetric comparative learning of out of distribution detection in long tail recognition