落后就要挨打,爱拼才会赢。有限的生命也可以创造奇迹,只要每天都有进步!
有一种拼博叫坚持...

首页>>PHP>>PHP给图片加水印

PHP给图片加水印

最近工作中遇到需要给用户上传的图片自动打水印的任务,开始以为很简单,原理很清楚,因为两年前有接触过LB模板加水印,那里也用到过自动给上传图片加水印的问题,当时还作过修改,但是没有深入研究,如今已经记不清楚了,只记录需要用到imagecopy,查了一下手册,就开始写程序了,结果,遇到很多问题,待我慢慢道来…
先说一下加水印需要注意的几个问题:

一、水印图片格式
给图片加水印的目的是防止盗版,但又不能影响正常的欣赏效果,故水印图片最好是透明的,且又不会出现齿轮状,所以用png24格式的透明背景水印图片,加在上传图片的右下角,比较符合国人的习惯。不太喜欢整张图处打满小水印,或是加在中奖的情况,印象不好。
这也是我开始的过程遇到的一个问题:美工的图片是png8格式的,会出现齿轮状。图片不是透明的,盖住了底图。水印位置没选好(说来惭愧,开始考虑上传图 片有大有小,水印图片大家也要随之变化,且位置也按比例变化,光是考虑这个算法及测试,就花了近两个小时,后来直接水印图片大小不变,位置稍作变化,搞定 了。)      

二、图片合成
PHP GD函数库里有两个常用函数可用于水印添加:imagecopy和imagecopymerge,两者的唯一区别是:前者比后者少了个合并程度参数,如:

bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

当$pct=100时,两函数完全一样。
那么,究竟用哪一个函数好呢?答案是都不好,两个结合起来用最好。两个函数我都作过测试,效果明显没有结合起来用好,具体什么原因,据说是通道的问题,网上说法不一,如果你感兴趣,可以研究一下。
那么如何结合起来用呢?下面是改进的方法:

 

此函数是PHP官网一高手在评论里写的,实践证明没有问题,还有其它人也写的有,测试过几个,但是有点问题。

用这个函数替换imagecopy和imagecopymerge,效果会比单独用好得多。

三、生成图片

通过imagecopy和imagecopymerge得到是资源类型的,只是保存在内存中,无法生成真实的图片,需要用imagejpeg(或者 imagepng,imagegif)等生成,才能在电脑里真实找到。惭愧,开始由于对这个理解不透彻,犯了这样的错误。希望大家不要犯同样的错误,如:
imagejpeg($re, ‘test00011.jpg’);

四、实现过程及说明

顺带附加一个改变图片大小的函数,以备迫后用:

 

« 上一篇: 下一篇:»

相关文章:



3 条评论 (我要评论)

发表评论

You must be logged in to post a comment.