当前位置:网站首页> 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上传图片添加水印内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- ROS installation error sudo: rosdep: command not found
- Overview of video self supervised learning
- Common interview questions in Android, 2022 golden nine silver ten Android factory interview questions hit
- Fuzor 2020軟件安裝包下載及安裝教程
- 出海十年:新旧接力,黑马崛起
- Go语言 | 02 for循环及常用函数的使用
- 2022 the most complete Tencent background automation testing and continuous deployment practice in the whole network [10000 words]
- 潘多拉 IOT 开发板学习(HAL 库)—— 实验8 定时器中断实验(学习笔记)
- C# 语言的基本语法结构
- 5 years of experience, 27 days of Android programmer interview, 2022 programmer advanced classic
猜你喜欢
C# 语言的基本语法结构
Interviewer: what is the difference between redis expiration deletion strategy and memory obsolescence strategy?
决策树与随机森林
618“低调”谢幕,百秋尚美如何携手品牌跨越“不确定时代”?
出海十年:新旧接力,黑马崛起
Tianyi cloud understands enterprise level data security in this way
Cf:b. almost Terry matrix [symmetry + finding rules + structure + I am structural garbage]
Redhat7.4 configure Yum software warehouse (rhel7.4)
[today in history] July 5: the mother of Google was born; Two Turing Award pioneers born on the same day
如何快速进阶自动化测试?听听这3位BAT大厂测试工程师的切身感想....
随机推荐
golang通过指针for...range实现切片中元素的值的更改
The worse the AI performance, the higher the bonus? Doctor of New York University offered a reward for the task of making the big model perform poorly
618“低调”谢幕,百秋尚美如何携手品牌跨越“不确定时代”?
图扑软件数字孪生 | 基于 BIM 技术的可视化管理系统
EMQX 5.0 正式发布:单集群支持 1 亿 MQTT 连接
Common interview questions in Android, 2022 golden nine silver ten Android factory interview questions hit
JS解力扣每日一题(十二)——556. 下一个更大元素 III(2022-7-3)
C# 语言的基本语法结构
Powerful tool for collection processing
[detailed explanation of AUTOSAR 14 startup process]
Thoroughly understand why network i/o is blocked?
RedHat7.4配置yum软件仓库(RHEL7.4)
Fuzor 2020軟件安裝包下載及安裝教程
EasyCVR电子地图中设备播放器loading样式的居中对齐优化
数据库 逻辑处理功能
Emqx 5.0 officially released: a single cluster supports 100million mqtt connections
R language Visual scatter plot graph, add labels to some data points in the graph, and always display all labels, even if they have too much overlap. Ggrep package helps
图扑软件数字孪生智慧风电系统
cf:B. Almost Ternary Matrix【对称 + 找规律 + 构造 + 我是构造垃圾】
Decision tree and random forest