PHP利用ueditor实现上传图片添加水印

博客在上传图片的时候,我希望能打上我博客链接的水印,掘金,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上传图片添加水印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PHP实现图片加水印功能

    这里分享下php给图片加水印的几个自定义函数 给图片加水印首先需要开启GD库. 用到的php函数是imagecopymerge () 和 imagecopy () imagecopymerge 函数可以支持两个图像叠加时,设置叠加的透明度 imagecopy 函数则不支持叠加透明. 基本概念就啰嗦到这,下边是几个函数的讲解 在图像上打上LOGO水印. logo透明的png图像,logo.png , 使用imagecopymerge函数,可以实现打上透明度为30%的水印图标 (可是当我的图片是jp

  • PHP实现随机生成水印图片功能

    基于PHP的GD图形库,自己生成一张图片.仅限初识GD库,实例学习. 一.需求 网站的布局用到了类似慕课网课程列表的风格,每一个课程是一个banner图,图下面是标题加简介.因为课程的数量较大没有为所有的课程设计专门的banner,所以需要按照一定的规则,来自己生成图片(本打算用div布局来解决,但div+img在响应式布局中不是很好控制). 生成的效果图: 二.工具&素材 1.PHP开启GD图形库扩展 2.准备多个小的水印图 3.获取预生成图片的背景色RGB值 三.代码 生成图片的过程,代码中

  • PHP结合Ueditor并修改图片上传路径

    前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找到配置文件修改它.配置文件位置: ueditor/php/config.json 内容如下: /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /* 上传图片配置项 */ "imageActionName": "uploadimage", /* 执行上传图片

  • PHP如何搭建百度Ueditor富文本编辑器

    本文为大家分享了PHP搭建百度Ueditor富文本编辑器的方法,供大家参考,具体内容如下 下载UEditor 官网:下载地址 将下载好的文件解压到thinkphp项目中,本文是解压到PUBLIC目录下并改文件夹名称为ueditor 第一步 引入javascript 在html中如入下面的js语句引入相关文件 <script type="text/javascript" charset="utf-8" src="__PUBLIC__/ueditor/u

  • PHP图片水印类的封装

    封装PHP的图片水印的类,供大家参考,具体内容如下 <?php header('Content-type:text/html;charset=utf8'); $img = new Image(); // $img->water('2a.jpg','logo.gif',0); class Image{ //路径 protected $path; //是否启用随机名字 protected $isRandName; //要保存的图像类型 protected $type; //通过构造方法队成员属性进

  • PHP利用ueditor实现上传图片添加水印

    博客在上传图片的时候,我希望能打上我博客链接的水印,掘金,csdn都是这么干的,这事我得学习. 平时的图片上传还好说,在文章编辑的时候,使用ueditor上传图片加水印需要修改ueditor部分PHP的源码,我这里大概记录一下. 首先打开php文件夹下的Uploader.class.php 找到private function upFile(),这是上传文件的主处理方法, 找到122行: $this->stateInfo = $this->stateMap[0]; 在这个下面加入:$this-

  • ASP.NET百度Ueditor编辑器实现上传图片添加水印效果

    前言 最近工作中遇到一个需求,是要实现asp.net百度ueditor图片上传添加水印的功能,通过查找相关的资料终于实现了,下面来给大家分享下实现的效果,文末给出了实例代码,大家可以参考学习,下面来一起学习学习吧. 效果图 首先来看下我们想要的功能界面,如果发觉这种效果不是你想要的,后面的内容就不用看了. 准备  从官网下载的Ueditor压缩包,我下载的是ueditor1_4_3-utf8-net 这个版本,下面的介绍是对这个版本而言的. 修改界面 先找到我们要添加"加水印[checkbox]

  • 为百度UE编辑器上传图片添加水印功能

    UEditor编辑器上传图片是自动提取的,但是图片没有水印功能,下面小编和各位一起来看看. UEditor编辑器没有上传图片加水印的功能,需要进行二次开发,本例是在PHPCMS系统中对百度编辑器进行二次开发,添加上传图片加水印功能. 首先打开UEditor编辑器文件目录的php文件夹,打开Uploader.class.php,把PHPCMS添加水印的方法复制过来,加到这个类所有成员方法最后面,然后进行修改如下: //图片加水印 public function watermark($source,

  • JS中利用FileReader实现上传图片前本地预览功能

    引子 平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上,这样做在图片比较小的时候没什么问题,大一点的话就会比较慢才能看到预览了,而且还产生了垃圾文件,所以比较好的是上传之前先在本地预览一下. 之前做项找插件的时候就知道纯前端可以实现图片本地预览,可今天面试的时候被问到时竟然一脸懵逼,然后竟然无意中就在电脑桌面发现了实现的demo,然后根据demo查了一下API,稍微总结下: 首先得拿到File对象 当用input标签上传图片时event对象中会包含

  • 与Django结合利用模型对上传图片预测的实例详解

    1 预处理 (1)对上传的图片进行预处理成100*100大小 def prepicture(picname): img = Image.open('./media/pic/' + picname) new_img = img.resize((100, 100), Image.BILINEAR) new_img.save(os.path.join('./media/pic/', os.path.basename(picname))) (2)将图片转化成数组 def read_image2(file

  • 基于Spring Boot利用 ajax实现上传图片功能

    效果如下: 1.启动类中加入 SpringBoot重写addResourceHandlers映射文件路径 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/imctemp-rainy/**").addResourceLocations("file:D:/E/"); } 设置静态资源路径 2.   表单

  • 如何利用PHP实现上传图片功能详解

    HTML文件 一. 设置编码UTF-8 对于中文网页需要使用<meta charset="utf-8">声明编码,否则会出现乱码. 二 .form表单 <form>标签用于为用户输入创建 HTML 表单,表单里包含php文件路径, <form action="1.php"> 设置编码类型, 需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了

  • vue实现上传图片添加水印

    本文实例为大家分享了vue上传图片添加水印的具体实现代码,供大家参考,具体内容如下 1.封装添加水印方法 /** * 添加水印 * @param {blob} file * @param {string} el * @returns {Promise} */ export async function addWaterMarker(file, el = '#markImg') { return new Promise(async (resolve, reject) => { try { // 先

  • vue实现上传图片添加水印(升级版)

    vue项目实现上传图片添加水印升级版,供大家参考,具体内容如下 封装水印方法 /** * 添加水印 * @param {blob} file * @param {string} el * @returns {Promise} */ export async function addWaterMarker(file, el = '#markImg') { return new Promise(async (resolve, reject) => { try { // 先压缩和旋转图片 file =

  • 百度ueditor组件上传图片后如何设置img里的alt属性

    百度ueditor组件,使用上传图片后,自动将上传图片显示在编辑器中,也就是插入了一个<img>标签.并设置了一个alt属性,其值是上传图片时的本地路径.暂时没发现哪里可以配置这个值.在查看发布的内容时,看到alt的值是一个磁盘路径,有点别扭. 可以在编辑完内容,保存到数据库时过滤下,修改alt的内容,也可以直接修改源码 function callback(){ try{ var link, json, loader, body = (iframe.contentDocument || ifr

随机推荐