TPImageWater 是ThinkPHP扩展的用来自动化为已经上传部分图片加水印的应用

这是第一部分,也就是遍历文件夹的内容,并践行筛选,循环实现为图片添加水印。
我在之前写过一个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

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

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

 

问题的解决:

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

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

4

最蛋疼的事情就是:

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

【解决方案】

5

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位图镂空效果是最好,但是我没有解决这个问题。

TPImageWater实现的效果:

4

 

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

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

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

github:https://github.com/postbird/TPImageWater.git

可以直接在github或者是git@osc上查看代码,文章代码将尽量不在显示!