PHP实例————制作水印图片

目前QQ空间和新浪微博等社交软件中,分享的图片大多都是添加水印的。添加水印之后的照片也就变得独一无二了,好像就是添加了一个专属的个人签名。可以很好的防止别人盗用你的照片,也能够让别人一看水印就能在上面得到一些关于照片的信息。今天写了一个给图片添加水印的函数,和大家分享一下。有了这个函数,给照片添加水印就显的方便多了。其实原理很简单,原图是一张图片,水印其实也是一张图片,只不过有的水印是白色或透明色背景,然后两张图片进行合成,就成了水印图片。

1.制作水印图片所需php函数

(1)getimagesize();

(2)imagecreatefromgif();imagecreatefromjpeg();imagecreatefrompng;

(3)imagecogy();

(4)imagegif();imagejpeg();imagepng();

具体函数如何使用,我就不细讲了,大家可以参考php参考手册

2.代码分享

<?php
function watermark($maxfile,$minfile){

	//获取大小图信息
	$maxarr=getimagesize($maxfile);
	$minarr=getimagesize($minfile);

	$max_width=$maxarr[0];
	$max_height=$maxarr[1];
	$max_format=$maxarr[2];
	$max_mime=$maxarr['mime'];
	
	$min_width=$minarr[0];
	$min_height=$minarr[1];
	$min_format=$minarr[2];
	//$min_mime=$minarr['mime'];
        
        //判断大小图格式
	switch($max_format){
		case 1:
			$max_createimg="imagecreatefromgif";
			$max_outimg="imagegif";
			break;
		case 2:
			$max_createimg="imagecreatefromjpeg";
			$max_outimg="imagejpeg";
			break;
		case 3:
			$max_createimg="imagecreatefrompng";
			$max_outimg="imagepng";
			break;
	}
	switch($min_format){
		case 1:
			$min_createimg="imagecreatefromgif";
			break;
		case 2:
			$min_createimg="imagecreatefromjpeg";
			break;
		case 3:
			$min_createimg="imagecreatefrompng";
			break;
	}
	//创建大小图资源
	$maxim=$max_createimg($maxfile);
	$minim=$min_createimg($minfile);
	
	//两张图的尺寸差
	$D_value_x=$max_width-$min_width;
	$D_value_y=$max_height-$min_height;
	
	//添加水印
	imagecopy($maxim,$minim,$D_value_x,$D_value_y,0,0,$min_width,$min_height);
	
	//保存水印图片
	header("content-type:{$max_mime}");

	$max_outimg($maxim,"watermark.jpg");
}
watermark("picture/apple.jpg","picture/copypic.jpg");
?>

3.说几点代码中可能不太好理解的地方

(1)因为不同格式的图片所需要的函数后缀是不一样的,所以必须在使用函数创建资源和保存水印图片前进行判断图片格式。

(2)计算两个图片的尺寸差,是为了将小图很好的添加到大图的右下角(大多水印都是添加到右下角的吧)。

4.整体可以优化的地方

(1)两个switch总觉得有点多了。如果放到if语句或者for循环中,肯定能整合一下。好饿,所以以后在优化这个问题(明显是给自己找借口)。

(2)我用的水印直接是另一张尺寸较小的图片。然而实际的水印大多是一行字,一个网址,一个时间等。可以用做制作验证码的方法,制作水印。然后将水印所需要的文字作为函数的参数,就可以在一张图片中添加自己想要的水印,同时水印的生成也不需要去找图片,完全自动生成。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值