php水印可以编辑位置,修改Discuz网站水印位置为任意(随机)位置的解决方案

news/2024/5/13 13:31:14/文章来源:https://blog.csdn.net/weixin_28958411/article/details/116280561

e6901f1232e19a36686a684f81d5d590.png

相信既然你看到了这个文章,而且有兴趣看下去,就说明你已经知道了水印是什么,当然如果你不知道但依然保持学习的热情,我这里就废话一句:水印其实就是为了保护我们的版权,让其他的人看到后认为该图片是我们的,打上我们的印记。大家都知道很多开源的程序都有类似的功能,或者可以借助第三方的插件完成,其实如果自己写一个实现水印的class也不是太难。

大家也知道Discuz核心程序部分就有了这个处理水印的class,而且这个class是比较完善的,比如可以中英文文字水印、图片水印等等,而且还可以在后台直接操作大概的水印位置。大家如果有过设置经验的就知道默认可以设置9个位置的水印,分别是中间位置、四个角、四条边的中点。当然,而且DZ这个类支持门户文章、论坛帖子、空间相册分别设置。如下图所示:

0773a5c0ae6518a7e5cdbb14c61586df.png

问题发现

那么这个时候问题来了,很多朋友可能有上面这些可供我们选择的还不够。比如说我们很多人会选择#9(也就是右下角),这是很多网站打水印用到的地方。但很多朋友会发现这个位置顶着右下角,只有几px的距离(如顶端的图片所示),有朋友可能想让它离边角更远一些,比如设置到距离离边线20px以上距离。那么这其实存在一个很纠结的问题,我相信dz开发团队也考虑过,那是什么问题呢?

1、既然有人可能需要考虑任意位置,那么为什么在写这个水印处理的类的时候为什么不写成那种可能直接让用户填写坐标的方式,而写成这种死板的方式呢?

2、就给出上面1的答案,我觉得肯定是他们考虑到大多数用户只需要基本的功能,而且只需要在后台简单设置就可以完成,而且这个设置看上去很通俗。大家可以想一下,如果是一个小白站长,现在这样的设置他一看就知道是什么意思,而如果要他填写坐标,那也许他会找不到北。

3、因此就写出了这种形式的类,让那些爱折腾的人就自己折腾去吧,于是就有了这篇文章类似的文章。

问题分析

前面说了控制这个水印位置的肯定是DZ核心程序的某个类库里面的,那么问题的关键就是找到这个类库在哪个文件里面。这有两个方法去找到:

1、通过查询开发手册的文件索引表,查找到处理图片的类,然后找到处理水印的函数(也就是这个类的一个方法之一)。

2、通过后台设置区域审查元素看到关键词(因为很多时候用词都是统一的),结果可以找到关键词watermarkstatus,而通过检索全站文件就会发现很多包含这个词的文件,当然我们只需要找类文件了,其他的就不用看了。

通过以上两种方法我们都可以找到source/class/calss_image.php这个文件,其实这个文件全部部分就是一个PHP类,而类名就是image,在这个image类下有很多函数(方法)。在400行左右我们就可以找到我们的目标——水印处理方法Watermark_GD()。实际上跟水印相关的不止这个方法,而这个方法只是设置水印位置的,也就是跟我们现在说的目标有关的,除此之外还有它下面的Watermark_IM()等。

问题解决

找到了这个类的这个方法那好说了,我们可以通过插件来调整具体的位置,甚至我们也可以把这个方法改写成在后台设置坐标的形式(当然需要我们另外设计一个我们插件用的数据表,因为我们做插件不可能直接修改DZ默认的数据结构,那样太不规范了,除此之外还要调整后台),当然这种方式是比较高阶的了,需要用户有基本的PHP基础了。

而下面就介绍一个简单的,谁都能看得懂的,而且因为水印位置相对固定,不需要经常去调整,因此对于很多不懂PHP的朋友来说下面是最好不过的方式了。那就是找到Watermark_GD的坐标设置部分代码(419-456行)

[cc lang="php"]

switch($this->param['watermarkstatus'][$type]) {

case 1:

$x = 5;

$y = 5;

break;

case 2:

$x = ($this->imginfo['width'] – $logo_w) / 2;

$y = 5;

break;

case 3:

$x = $this->imginfo['width'] – $logo_w – 5;

$y = 5;

break;

case 4:

$x = 5;

$y = ($this->imginfo['height'] – $logo_h) / 2;

break;

case 5:

$x = ($this->imginfo['width'] – $logo_w) / 2;

$y = ($this->imginfo['height'] – $logo_h) / 2;

break;

case 6:

$x = $this->imginfo['width'] – $logo_w;

$y = ($this->imginfo['height'] – $logo_h) / 2;

break;

case 7:

$x = 5;

$y = $this->imginfo['height'] – $logo_h – 5;

break;

case 8:

$x = ($this->imginfo['width'] – $logo_w) / 2;

$y = $this->imginfo['height'] – $logo_h – 5;

break;

case 9:

$x = $this->imginfo['width'] – $logo_w – 5;

$y = $this->imginfo['height'] – $logo_h – 5;

break;

}

[/cc]

如上面的“5”就是离边的距离了,如果需要变为25就把5改成25即可,当然其中的1-9就是后台的9个位置,比如最后没的9就是指右下角的那个。其实这部分就是一个Switch块。修改后的效果就如下图所示

107887d04a985c5b4f9e05dadb4a1a51.png

当然,就如前面所说的,这里摆出代码说的这种是最基本的修改方案,如果还需要继续进一步修改就用DZ提供的API写插件自定义,因为其实这种修改DZ自带类的方式是不太规范的,比如程序升级后所做的修改就被覆盖了等等。当然即使这种最简单的,我相信依然有很多朋友需要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_798674.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qqshow在线试衣网站源码(php+mysql)_简单的php+mysql聊天室实现方法(附源码)

本文实例讲述了简单的phpmysql聊天室实现方法。分享给大家供大家参考,具体如下:这里介绍的程序分为 8 个文件:frameset框架页面:index.php显示聊天室内容页:show.php用户登陆页面:login.php用户发言页面:sp…

《精通PHP+MySQL动态网站开发》

http://product.dangdang.com/23220410.html

《HTML5移动网站与App开发实战》简介

#好书推荐##好书奇遇季#《HTML5移动网站与App开发实战》,京东当当天猫都有发售。定价79元,网店打折销售更便宜。本书内容非常系统全面,配套示例源码与PPT课件。 本书由浅入深出、全面系统地介绍HTML5相关技术及其在移动开发领域的应用。从基本…

发布一个网站

从tomcat角度来理解发布web网站的过程 1、下载tomcat,自行参考百度文章 2、查看tomcat的webapps文件目录,webapps目录用来存放应用程序,所以目录下的每一个文件夹都是一个应用程序 网站的结构 –webapps:tomcat服务器的web目录 –…

cdn缓存服务器有网站图片,CDN缓存服务器图片存储一致性hash算法的理解

用hash做缓存,假如有三台服务器,1,2,3,有三万张图片,我想将图片平均缓存到我三台服务器上,一个服务器大概一万张,怎么去实现这个办法呢,可以用hash来取余数进行操作,加入我们是以图片…

html静态登录界面代码_如何快速搭建静态网站

“ 在日常运用场景中,由于便捷、低开发成本,静态网站常被作为快速建站的一个备选方案,它可以满足许多内容相对固定的网站建站需求,例如企业官网(介绍、产品展示等)、个人简历网站等。因为内容不常更新,所以可以不带管理…

springboot 2.3_SpringBoot必备的5个免费网站,果断收藏~

在过去的几年的时间里,最让人兴奋、回头率最高、最能改变游戏规则的东西,大概就是『 Spring Boot 』了。Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它,你可以更加敏捷地开发Spring应用程序&…

什么是域名?什么网站名?什么是URL?

域名,相信大家都不默认,也使用过无数次!比如: google.com、baidu.com、163.com等。 这时候,你可能要奇怪了,为什么小编没有在前面加上www? 因为正常情况下,不应该是www.baidu.com之类的吗&…

mybatis foreach index用法_SpringBoot入门建站全系列(四)Mybatis使用进阶篇:动态SQL与分页...

SpringBoot入门建站全系列(四)Mybatis使用进阶篇:动态SQL与分页上一篇介绍了Mybatis的配置和基本用法《SpringBoot入门建站全系列(三)Mybatis操作数据库》这一篇在此基础上进阶使用mybatis。所以,这里就不说怎么怎么配…

宝塔绑定域名访问不了_建站系列教程(二)--本地局域网访问和域名解析

第二讲:如何访问网站:1、本地访问、局域网访问安装wampsever集成软件,w:windows a:apache m:mysql p:php,也就是搭建了一个本地服务器环境。打开软件,在任务栏可以看到绿色的图标,表示已经正常开启服务器环…

python 代码变流程图_一个很香的python练习网站

推荐一个python练习网站w3resource,练习题包括python的基础数据类型,函数、内置的一些库比如os、datatime、collections等等,还有一些第三方的库,每道题会给出题目描述,然后提供代码编辑窗口,还有网站给出的…

linux软件下载网站6,CentOS 6.6 发布下载

虽然 RHEL/CentOS 7 已经发布一段时间了,但是 6 系列仍然在继续更新和维护。昨日,该系列跟随其上游版本,发布了其最新更新版本 CentOS 6.6。由于 RHEL/CentOS 7 带来了很多大幅变化,包括 systemd 之类,其是非功过不好评…

前端设计开发人员必看的资讯、资源、教程类网站大全

做为一个前端设计开发人员,每天都要抽出时间来看一些前端资讯网站、PHOTOSHOP设计资源类网站、CSS作品欣赏类网站,以及各种相关网站。今天分享给大家的60个网站,均是前端开发爱好者们必看的,非常的经典。希望朋友们收藏。 W3Schoo…

实用用网站推荐:你可能不知道的10个图标搜索引擎

设计师们在工作中经常需要用到各种图标素材,虽然网上能搜到很多的图标资源网站,但要找到免费的高质量图标却很难。之前笔者也向大家分享过8个超棒的免费高质量图标搜索引擎,今天与大家分享另外一些优秀的免费质量图标搜索引擎,相信…

(转)分布式加载网站的静态文件

原文地址:http://www.cnblogs.com/huangxiufen/archive/2012/09/07/2668584.html因为公司想要通过静动态分离的方式使得网站访问速度更快速,所以选择了分布式加载网站中的静态文件(js,css,images),当然还有另外一些方法,这边就不做深入探讨(因…

网站以及app导航设计 十大实用技巧

设计一款良好的、用户友好的网站并没有什么科学之举,除非你懂得利用技巧和策略,方能让用户流连忘返的访问你的网站。这就要求设计师在网站设计上保持洁净、简单,使用正确的色调、清晰度、响应速度以及极易导航功能。因此,网站的友…

IE无法打开internet网站已终止操作的解决的方法

用IE内核浏览器的朋友,或许不经意间会碰到这样滴问题:打开某个网页时,浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”。而大多数情况下该页面甚至非常可能看起来已经载入完成,内容能够全然显…

sublime教程html5,SublimeText开发html网站教程(一)

Sublime Text是一款跨平台的代码编译器。本节内容包含如下几个部分:1.sublime text的安装2.快捷键使用方法3.插件的安装以及替换一.Sublime Text的安装Sublime Text的官网下载地址:点击打开链接 如下图Sublime Text可用于开发的使用环境,如下…

服务器加什么网站才打开快,如何优化让网站打开速度更快些呢?

如何优化让网站打开速度更快些呢?前段时间,经常有人跟我说起为什么有的网站打开速度会很慢,等它加载完成需要一分钟左右,而有的打开速度很快,刷的一下就出来了。在相同的带宽下为什么会出现这种现象呢?这与你的网站的…

10个很棒的学习Android 开发的网站(转)

看到江湖旅人 写的《10个很棒的学习iOS开发的网站 - 简书》,所以就忍不住写Android 啦,也希望对大家有帮助。我推荐的网站,都是我在学习Android 开发过程中发现的好网站,给初学者一些建议,少走一些弯路。 Android Deve…