PHP 上传图片添加水印

原创 2015年09月25日 16:33:45
<?php
	//为上传的图片加上水印
	/*
	*自定义添加水印处理函数makeImageWaterMark
	*$image  上传的图片(要添加水印效果的图片资源标识)
	*$pos  水印位置
	*$water_text  水印文字
	*$font_size 水印文字大小
	*$color 水印文字颜色
	*/
	function makeImageWaterMark($image,$pos,$water_text,$font_size,$color)
	{
		//获取TrueType字体
		$font_type = "C://WINDOWS//Fonts//SIMLI.TTF";

		//检查图片资源是否存在
		if (!empty($image) && file_exists($image))
		{
			//获取图像大小:返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。
			$img_info = getimagesize($image);
			//获取背景图片的宽
			$g_w = $img_info[0];
			//获取背景图片的高
			$g_h = $img_info[1];

			//获取背景图片的格式
			switch ($img_info[2])
			{
				case 1:
					$img = imagecreatefromgif($image);
					break;
				
				case 2:
					$img = imagecreatefromjpeg($image);
					break;

				case 3:
					$img = imagecreatefrompng($image);
					break;

				default:
					die('图片格式错误!');
			}
		}
		else
		{
			die('需要加水印的图片不存在!');
		}

		/*
		*获取使用TrueType 字体的文字的范围
		*array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
		*float $size   字体大小
		*float $angle  将被度量的角度大小
		*string $fontfile   水印文字字体
		*string $text  水印文字
		*/
		$temp = imagettfbbox(ceil($font_size*2.5),0,$font_type,$water_text);
		$w = $temp[2] - $temp[6];
		$h = $temp[3] - $temp[7];

		//判断水印文字大小是否超过图片大小
		if(($g_w<$w) || ($g_h<$h))
		{
			echo '需要添加水印的图片大小比水印文字区域小,无法生成水印!';
			return;
		}


		/*
		*设置10种水印效果位置
		*0:默认是随机位置
		*1:顶端居左
		*2:顶端居中
		*3:顶端居右
		*4:中部居左
		*5:中部居中
		*6:中部居右
		*7:底端居左
		*8:底端居中
		*9:底端居右
		*/
		switch ($pos) {
			case 0:
				$pos_x = rand(0,($g_w - $w));
				$pos_y = rand(0,($g_h - $h));
				break;

			case 1:
				$pos_x = 0;
				$pos_y = 0;
				break;

			case 2:
				$pos_x = ($g_w - $w) / 2;
				$pos_y = 0;
				break;

			case 3:
				$pos_x = $g_w - $w;
				$pos_y = 0;
				break;

			case 4:
				$pos_x = 0;
				$pos_y = ($g_h - $h) / 2;
				break;

			case 5:
				$pos_x = ($g_w - $w) / 2;
				$pos_y = ($g_h - $h) / 2;
				break;

			case 6:
				$pos_x = $g_w - $w;
				$pos_y = ($g_h - $h) / 2;
				break;

			case 7:
				$pos_x = 0;
				$pos_y = $g_h - $h;
				break;

			case 8:
				$pos_x = ($g_w -$w) / 2;
				$pos_y = $g_h -$h;
				break;

			case 9:
				$pos_x = $g_w - $w;
				$pos_y = $g_h - $h;
				break;

			default:
				$pos_x = rand(0,($g_w - $w));
				$pos_y = rand(0,($g_h - $h));
				break;
		}

		//设置图像混色模式
		imagealphablending($img, true);


		if(!empty($color) && (strlen($color)==7))
		{
			$R = hexdec(substr($color,1,2));
			$G = hexdec(substr($color,3,2));
			$B = hexdec(substr($color,5));
		}

		//为一幅图像分配颜色
		$text_color = imagecolorallocate($img, $R, $G, $B);

		//用 TrueType 字体向图像写入文本
		imagettftext($img, $font_size, 0, $pos_x, $pos_y, $text_color, $font_type, $water_text);

		//获取背景图的格式
		switch ($img_info[2])
		{
			case 1:
				imagegif($img,$image);
				break;

			case 2:
				imagejpeg($img,$image);
				break;

			case 3:
				imagepng($img,$image);
				break;
			
			default:
				die('不被支持格式的图片');
		}

		imagedestroy($img);
	}

	/*
	*处理上传图片
	*当文件上传后将会把文件名修改,已当前时间戳和元文件组合作为新文件名
	*水印效果将会在新文件中生成
	*/
	if (isset($_FILES) && !empty($_FILES['userfile']) && $_FILES['userfile']['size']>0)
	{
		//将文件存放在同一目录下的upload文件夹中
		$upladfile = "./upload/".time()."_".$_FILES['userfile']['name'];
		//复制文件并加上水印文字并显示
		if(copy($_FILES['userfile']['tmp_name'], $upladfile))
		{
			///$str = "水印效果";//定义水印文字
			$str = $_POST['str'];
			makeImageWaterMark($upladfile,0,$str,16,"#43042A");
			echo "<img src=\"".$upladfile."\".border=\"0\"><br/><br/>";
		}
		else
		{
			echo '图片上传失败!';
		}
	}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片上传</title>

</head>

<body>
	<form enctype="multipart/form-data" method="post">
		输入您需要添加的水印文字:<input name="str" type="text" /><br/><br/>
		选择您需要添加水印的图片:<input name="userfile" type="file" /><br/><br/>
		<input type="submit" value="上传" />
		
	</form>
</body>
</html>

效果如下:


PHP 给上传到网页的图片添加水印(文字和图像)

首先构建一个添加文字水印的类:
  • manbujingxin
  • manbujingxin
  • 2011年08月27日 09:07
  • 1797

PHP自动向图片添加水印

/*** 基本图片处理,用于完成图片缩入,水印添加* 当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小* 水印图可以设置跟背景的合并度** Copyright(c) 2005 by ustb...
  • phphot
  • phphot
  • 2007年09月27日 09:16
  • 2383

PHP版的kindeditor编辑器加图片上传水印功能

首先简单介绍一下kindeditor编辑器:   KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的...
  • tthomecn
  • tthomecn
  • 2014年09月28日 14:33
  • 1224

如何给上传图片增加水印

下面是加水印的函数,直接在上传图片的地方调用就好了,两个参数分别是File和String。/** * 加水印 * @param ifile */ public void addWater...
  • kai_wei
  • kai_wei
  • 2017年05月25日 22:15
  • 330

PHP实现给图片加图片水印

PHP实现给图片加图片水印 一、开发环境 1、Windows+Apache+MySQL+PHP的环境。 2、文本编辑器:Sublime。 二、主要技术 PHP+HTML+CSS 三、效果图...
  • mico_cmm
  • mico_cmm
  • 2016年11月10日 21:53
  • 471

Web关于图片上传,缩略图及加水印,还有一些常用的方法

Web关于图片上传,缩略图及加水印,还有一些常用的方法
  • wanlong360599336
  • wanlong360599336
  • 2015年06月24日 16:00
  • 2627

上传图片并给图片添加文字水印

上传图片并给图片添加文字水印
  • nianzhi1202
  • nianzhi1202
  • 2017年06月17日 14:36
  • 237

使用七牛上传图片并加水印

这里介绍的面板操作,所使用的界面是旧版的界面,如下图所示 如果是在新版的界面,请切换到旧版界面,操作如下 新建一个存储空间(bucket),操作如下 新建一个队列,操作如下 查看自...
  • farYang
  • farYang
  • 2016年03月16日 09:28
  • 7087

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

我在之前写过一个controller样式的扩展,主要是循环遍历以前上传的照片,加上水印。 原文链接:http://www.ptbird.cn/thinkphp-image-water-already...
  • qq_20441521
  • qq_20441521
  • 2016年10月22日 12:01
  • 1258

Spring MVC:图片上传并添加水印(图片和文字)

页面代码
  • CrazyLai1996
  • CrazyLai1996
  • 2017年06月26日 21:33
  • 676
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP 上传图片添加水印
举报原因:
原因补充:

(最多只允许输入30个字)