PHP 上传图片添加水印
2015-09-25 16:33
786 查看
<?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>
效果如下:
相关文章推荐
- ThinkPHP在Cli模式下使用模板引擎的方法
- InitPHP
- php if星期的流程控制函数代码
- php上传 找不到临时文件夹解决方法
- ffmpeg 接收解码rtp h264视频流
- php for循环之9乘9乘法表实例代码
- PHP获取通过windows系统命令wmic获取MAC地址、cpu序列号、主板序列号
- 腾讯CMEM的PHP扩展编译安装方法
- php5.2.17及手动打补丁php-fpm安装
- PHP发送短信
- PHP计算程序运行时间的类
- PHP生成随机字符串(3种方法)
- phpcms v9 代码分析笔记2
- PHP-关于模板的原理和解析
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
- PHP防盗链的基本思想 防盗链的设置方法
- php几个常用的概率算法(抽奖、广告首选)
- 十个PHP高级应用技巧果断收藏
- ubuntu14安装php模块报错
- PHP中的Session对象如何使用