PHP 图片水印类代码
2015-01-24信息快讯网
这个类功能很强大,细节很棒!希望大家喜欢,并积极指点
支持文字水印、图片水印支持水印的位置随机或固定(九宫格)
水印透明度设置(图片水印和文字水印都支持)
文字水印的字体、颜色、大小设置
图片水印的背景透明
<?php /** * 加水印类,支持文字图片水印的透明度设置、水印图片背景透明。 * 日期:2011-09-27 * 作者:www.jb51.net * 使用: * $obj = new WaterMask($imgFileName); //实例化对象 * $obj->$waterType = 1; //类型:0为文字水印、1为图片水印 * $obj->$transparent = 45; //水印透明度 * $obj->$waterStr = 'www.jb51.net'; //水印文字 * $obj->$fontSize = 16; //文字字体大小 * $obj->$fontColor = array(255,0255); //水印文字颜色(RGB) * $obj->$fontFile = = 'AHGBold.ttf'; //字体文件 * $obj->output(); //输出水印图片文件覆盖到输入的图片文件 */ class WaterMask{ public $waterType = 1; //水印类型:0为文字水印、1为图片水印 public $pos = 0; //水印位置 public $transparent = 45; //水印透明度 public $waterStr = 'www.jb51.net'; //水印文字 public $fontSize = 16; //文字字体大小 public $fontColor = array(255,0,255); //水印文字颜色(RGB) public $fontFile = 'AHGBold.ttf'; //字体文件 public $waterImg = 'logo.png'; //水印图片 private $srcImg = ''; //需要添加水印的图片 private $im = ''; //图片句柄 private $water_im = ''; //水印图片句柄 private $srcImg_info = ''; //图片信息 private $waterImg_info = ''; //水印图片信息 private $str_w = ''; //水印文字宽度 private $str_h = ''; //水印文字高度 private $x = ''; //水印X坐标 private $y = ''; //水印y坐标 function __construct($img) { //析构函数 $this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!'); } private function imginfo() { //获取需要添加水印的图片的信息,并载入图片。 $this->srcImg_info = getimagesize($this->srcImg); switch ($this->srcImg_info[2]) { case 3: $this->im = imagecreatefrompng($this->srcImg); break 1; case 2: $this->im = imagecreatefromjpeg($this->srcImg); break 1; case 1: $this->im = imagecreatefromgif($this->srcImg); break 1; default: die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。'); } } private function waterimginfo() { //获取水印图片的信息,并载入图片。 $this->waterImg_info = getimagesize($this->waterImg); switch ($this->waterImg_info[2]) { case 3: $this->water_im = imagecreatefrompng($this->waterImg); break 1; case 2: $this->water_im = imagecreatefromjpeg($this->waterImg); break 1; case 1: $this->water_im = imagecreatefromgif($this->waterImg); break 1; default: die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。'); } } private function waterpos() { //水印位置算法 switch ($this->pos) { case 0: //随机位置 $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]); $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]); break 1; case 1: //上左 $this->x = 0; $this->y = 0; break 1; case 2: //上中 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2; $this->y = 0; break 1; case 3: //上右 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0]; $this->y = 0; break 1; case 4: //中左 $this->x = 0; $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2; break 1; case 5: //中中 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2; $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2; break 1; case 6: //中右 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0]; $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2; break 1; case 7: //下左 $this->x = 0; $this->y = $this->srcImg_info[1]-$this->waterImg_info[1]; break 1; case 8: //下中 $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2; $this->y = $this->srcImg_info[1]-$this->waterImg_info[1]; break 1; default: //下右 $this->x = $this->srcImg_info[0]-$this->waterImg_info[0]; $this->y = $this->srcImg_info[1]-$this->waterImg_info[1]; break 1; } } private function waterimg() { if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]){ die('水印比原图大!'); } $this->waterpos(); $cut = imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]); imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]); $pct = $this->transparent; imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]); imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct); } private function waterstr() { $rect = imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr); $w = abs($rect[2]-$rect[6]); $h = abs($rect[3]-$rect[7]); $fontHeight = $this->fontSize; $this->water_im = imagecreatetruecolor($w, $h); imagealphablending($this->water_im,false); imagesavealpha($this->water_im,true); $white_alpha = imagecolorallocatealpha($this->water_im,255,255,255,127); imagefill($this->water_im,0,0,$white_alpha); $color = imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]); imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr); $this->waterImg_info = array(0=>$w,1=>$h); $this->waterimg(); } function output() { $this->imginfo(); if ($this->waterType == 0) { $this->waterstr(); }else { $this->waterimginfo(); $this->waterimg(); } switch ($this->srcImg_info[2]) { case 3: imagepng($this->im,$this->srcImg); break 1; case 2: imagejpeg($this->im,$this->srcImg); break 1; case 1: imagegif($this->im,$this->srcImg); break 1; default: die('添加水印失败!'); break; } imagedestroy($this->im); imagedestroy($this->water_im); } } ?>
php文字水印和php图片水印实现代码(二种加水印方法)
PHP Class&Object -- PHP 自排序二叉树的深入解析
通过PHP current函数获取未知字符键名数组第一个元素的值
PHP多例模式介绍
PHP获取和操作配置文件php.ini的几个函数介绍
PHP垃圾回收机制引用计数器概念分析
基于PHP服务端图片生成缩略图的方法详解
解析php中两种缩放图片的函数,为图片添加水印
php缩放图片(根据宽高的等比例缩放)实例介绍
如何使用php绘制在图片上的正余弦曲线
如何用php生成扭曲及旋转的验证码图片
php实现多张图片上传加水印技巧
php图片加水印原理(超简单的实例代码)
php加水印的代码(支持半透明透明打水印,支持png透明背景)
php图片加中文水印实现代码分享
PHP实现手机归属地查询API接口实现代码
PHP setTime 设置当前时间的代码
PHP 透明水印生成代码
无JS,完全php面向过程数据分页实现代码
php实现快速排序法函数代码
php中3种方法统计字符串中每种字符的个数并排序
gd库图片下载类实现下载网页所有图片的php代码
PHP图片验证码制作实现分享(全)
PHP图片处理类 phpThumb参数用法介绍
PHPThumb PHP 图片缩略图库
php中通过正则表达式下载内容中的远程图片的函数代码
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码