您的位置:首页 > 编程语言 > PHP开发

ThinkPHP自动化为已经上传的图片添加「 响应式」水印(文件夹遍历部分)

2016-10-22 12:01 337 查看
版权属于: Postbird - There
I am , in the world more exciting!
原文地址: http://www.ptbird.cn/thinkphp-image-water-file/
转载时必须以链接形式注明原始出处及本声明。

TPImageWater

ThinkPHP扩展的为已经上传的图片自动添加【响应式】水印。 给出标准样式的照片大小、水印大小、水印位置,循环遍历或者根据数据库字段遍历添加水印,根据比例计算合适的水印大小和位置

具体介绍连接到:
ThinkPHP自动化为已经上传的图片添加「 响应式」水印(文件遍历部分) http://www.ptbird.cn/thinkphp-image-water-file/
我在之前写过一个controller样式的扩展,主要是循环遍历以前上传的照片,加上水印。

原文链接:http://www.ptbird.cn/thinkphp-image-water-already-uploads/

应用的时候遇到了多个问题,因此对Controller进行了改造完善,并且提出了根据文件夹遍历和数据库记录两种形式的遍历加水印。

【响应式】根据不同大小、长宽比例的图片自动调整水印大小和位置,做到所有图片与需求样式基本一样。

主要解决的问题如下:

1、图片的大小不是统一的,之前写的Controller默认大小是统一的,加水印存在问题。(甚至有图片小于水印图片大小)

2、水印的位置,需求方要求在一个固定的位置。thinkphp手册上只有固定的8个位置,不符合要求。而由于图片的大小,导致水印位置无法确定。

提前说一下现在存在的问题:

1、不能一条一条输出成功字符串一边处理文件(见后面效果)

2、速度慢的吓人。30S只能处理250张照片,4000多张处理速度为10分钟左右。

因此需要设置最大执行时间0,也就是不限制执行时间。

真心希望有哪位仁兄能够解决这个问题。


文件说明:

1、增加入口文件「waterimage.php」,主要是不修改原来的系统,Application文件夹生成为./AppWaterImage



2、当然首页index.php是一个输出内容,主要是【FileImageWaterController.class.php】和【SqlImageWaterController.class.php】



3、为了保证可访问性,增加了code参数,可以更改代码中的code,保证访问的正确性。当然删除是最好的选择。

 


问题的解决:

图片大小不统一,因此水印大小不能是默认大小。

水印的位置要求必须是固定的,标准样式在图中已经标明。



最蛋疼的事情就是:

标准仅仅是标准,里面400多张图片各种大小,长宽比例,甚至还有比水印的小的图片,也要加水印,所以关键问题怎样做到响应式的添加水印(虽然我不知道这个响应式用的是否恰当)


【解决方案】






【TP框架方面需要注意的问题】

我在thinkphp论坛中看到有人问tp的水印位置只有九个位置,官网手册也没有给出说明,只说了9个。

其实TP水印在3.2已经进行了改版,water()方法有一个location参数可以是数组类型的 array(x,y),分别代表x,y坐标,我们根据不同图片确定水印大致的位置就是通过比例计算改变x,y坐标实现的。

具体的TP框架中的GD库中有的。


【遇到的新问题】

因为需要根据比例计算水印图片的大小,因此对water.jpg需要进行操作,一开始使用的是png位图,通过png背景镂空实现镂空效果。

但是TP对水印图片thumb()处理后,png位图格式被破坏,所以只能使用water.jpg格式图片,透明使用参数80%进行透明,如下面的图,这样的解决的效果其实不是很好,png位图镂空效果是最好,但是我没有解决这个问题。


【处理效果】不同大小长宽比例的图片水印却差不多。

p










【具体代码】(可以查看下面关于文件遍历的代码,也可以查看码云或者是github地址)

下面代码可能输出过程中html标签替代问题,建议直接下载gitosc或者是github的源码查看

码云:https://git.oschina.net/postbird/TPImageWater

github:https://github.com/postbird/TPImageWater.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp 水印 php