php 之 图片水印 (支持批量图片处理)(支持添加图片水印,文字水印)
2014-07-28 16:52
711 查看
运行文件: index.php
水
4000
印处理类 ImageWaterMake.class.php
配置文件 waterImg.conf.php
<?php require_once 'ImageWaterMake.class.php'; require_once 'waterImg.conf.php'; $iwm = new ImageWaterMake(); //创建水印对象 if(!empty($waterImg)){ foreach ($waterImg as $arrI){ waterImg($iwm,$bgPath,$arrI,''); } } if (!empty($waterText)) { foreach ($waterText as $arrT){ waterImg($iwm,$bgPath,'',$arrT); } } echo "程序结束!"; //-------------------------------------------------------------------------------------------- //打水印 function waterImg($iwm,$bgPath,$waterImg,$waterText){ if (is_dir($bgPath)) { if(($dir_handle = @opendir($bgPath))!=null){ while(($filename = readdir($dir_handle))!=null){ if ($filename != '.' && $filename != '..') { $subFile=$bgPath.'/'.$filename;//获取文件名字 if (is_file($subFile)) {//为文件 打水印 $info = pathinfo($subFile); if($info['extension'] =='jpg' || $info['extension'] =='png' || $info['extension'] =='gif'){ $iwm->setGroundImage($subFile);//设置背景图 ///////////////////////////////////////设置水印属性 if(!empty($waterImg)){ $iwm->setWaterImg($waterImg[0]);//设置水印图片 $iwm->setWaterPerPos($waterImg[1]);//设置水印位置 $iwm->setWaterSize($waterImg[2]);//设置水印图片大小 } if (!empty($waterText)) { $iwm->setWaterText($waterText[0]);//设置文字水印中的文字 $iwm->setTextPerPos($waterText[1]);//设置文字水印位置 $iwm->setTextSize($waterText[2]);//设置文字水印大小 $iwm->setTextColor($waterText[3]);//设置文字颜色 } ///////////////////////////////////////设置水印属性 $iwm->run();//打水印 }else { continue; } } if (is_dir($subFile)) {//为目录 waterImg($iwm,$subFile,$waterImg,$waterText); } } } }else{ echo "背景文件夹打开错误!"; } }else{ echo "背景图片目录无法获取!"; } } ?>
水
4000
印处理类 ImageWaterMake.class.php
<?php /** * 图片水印类 * @author skyling * 2014/7/28 */ class ImageWaterMake { private $groundImage; //背景图 private $waterImg; //水印图 private $waterPos; //水印位置 private $waterText; //水印文字 private $textSize; //文字大小 private $textColor; //文字颜色 private $textPos; //文字水印位置 private $waterSize; //图片水印缩放比例 private $waterPerPos; private $textPerPos; private $bgIm; private $waterIm; private $saveFile; private $isWaterImage=TRUE; //是否可以打水印 private $bgInfo;//[0] width [1]height [2] .jpg private $waterInfo;//[0] width [1]height [2] .jpg public function run(){ $this->readBgImg(); //读取背景文件 $this->readWaterImg(); //读取水印文件 $this->getTextPos(); $this->getWaterPos(); $this->chImgSize(); //改变水印大小 $this->imageWaterMarker(); $this->saveImg(); } /** * 改变水印大小 */ private function chImgSize(){ if ($this->saveFile == $this->waterImg || $this->waterSize==1) { return ; } $this->saveFile = dirname($this->waterImg).'\ch'.$this->waterSize.basename($this->waterImg); if(!file_exists($this->saveFile)){ $im = imagecreatetruecolor( $this->waterInfo[0]*$this->waterSize, $this->waterInfo[1]*$this->waterSize); imagealphablending($im, true); imagesavealpha($im, true); $white = imagecolorallocatealpha($im,255,255,255,127); imagefill($im,0,0,$white); imagecopyresized($im, $this->waterIm, 0, 0, 0, 0, $this->waterInfo[0]*$this->waterSize, $this->waterInfo[0]*$this->waterSize, $this->waterInfo[0], $this->waterInfo[1]); switch($this->bgInfo[2])//取得背景图片的格式 { case 1:imagegif($im,$this->saveFile);break; case 2:imagejpeg($im,$this->saveFile);break; case 3:imagepng($im,$this->saveFile);break; default:die($this->waterIm."改变大小发生错误!"); } } $this->setWaterImg($this->saveFile); $this->readWaterImg(); } /** * 读取背景 */ private function readBgImg(){ if (!empty($this->groundImage) && file_exists($this->groundImage)) { $this->bgInfo = getimagesize($this->groundImage); switch($this->bgInfo[2])//取得水印图片的格式 { case 1:$this->bgIm = imagecreatefromgif($this->groundImage);break; case 2:$this->bgIm = imagecreatefromjpeg($this->groundImage);break; case 3:$this->bgIm = imagecreatefrompng($this->groundImage);break; default:die("背景图片暂时只支持gif,jpg,png!");$this->isWaterImage = FALSE;break; } return; } $this->isWaterImage = FALSE; } /** * 读取水印 */ private function readWaterImg(){ if (!empty($this->waterImg) && file_exists($this->waterImg)) { $this->waterInfo = getimagesize($this->waterImg); switch($this->waterInfo[2])//取得水印图片的格式 { case 1:$this->waterIm = imagecreatefromgif($this->waterImg);break; case 2:$this->waterIm = imagecreatefromjpeg($this->waterImg);break; case 3:$this->waterIm = imagecreatefrompng($this->waterImg);break; default:die("水印图片暂时只支持gif,jpg,png!");$this->isWaterImage = FALSE;echo "水印图片路径不正确!"; } return; } $this->isWaterImage = FALSE; echo "水印图片路径不正确!"; } public function saveImg(){ //生成水印后的图片 $saveFile = $this->groundImage; switch($this->bgInfo[2])//取得背景图片的格式 { case 1:imagegif($this->bgIm,$saveFile);break; case 2:imagejpeg($this->bgIm,$saveFile);break; case 3:imagepng($this->bgIm,$saveFile);break; default:die($this->groundImage."生成图片错误!");break; } echo $this->groundImage. " + ".$this->waterImg."水印生成成功!<br>"; } function __destruct(){ } /** * 创建水印 */ public function imageWaterMarker(){ imagealphablending($this->bgIm, true); if ($this->isWaterImage) {//图片水印 imagecopy($this->bgIm, $this->waterIm, $this->waterPos['x'], $this->waterPos['y'], 0, 0, $this->waterInfo[0], $this->waterInfo[1]); } if ($this->waterText) {//文字水印 if( !empty($this->textColor) && (strlen($this->textColor)==7) ) { $R = hexdec(substr($this->textColor,1,2)); $G = hexdec(substr($this->textColor,3,2)); $B = hexdec(substr($this->textColor,5)); } else { die("水印文字颜色格式不正确!"); } imagestring ( $this->bgIm, $this->textSize, $this->textPos['x'], $this->textPos['y'], $this->waterText, imagecolorallocate($this->bgIm, $R, $G, $B)); } } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function getWaterPos() { if ($this->waterPerPos) { $this->waterPos['x']=ceil($this->bgInfo[0]*$this->waterPerPos[0]); $this->waterPos['y']=ceil($this->bgInfo[1]*$this->waterPerPos[1]); }else { $this->waterPos['x']=ceil($this->bgInfo[0]*0.3); $this->waterPos['y']=ceil($this->bgInfo[1]*0.4); } } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function getTextPos() { if ($this->textPerPos) { $this->textPos['x']=ceil($this->bgInfo[0]*$this->textPerPos[0]); $this->textPos['y']=ceil($this->bgInfo[1]*$this->textPerPos[1]); }else { $this->textPos['x']=ceil($this->bgInfo[0]*0.1); $this->textPos['y']=ceil($this->bgInfo[1]*0.9); } } /** * 设置水印大小 * @param number $per */ public function setWaterSize($waterSize=1){ $this->waterSize=$waterSize; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setGroundImage($groundImage) { $this->groundImage = $groundImage; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setWaterImg($waterImg) { $this->waterImg = $waterImg; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setWaterText($waterText) { $this->waterText = $waterText; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setTextSize($textSize) { $this->textSize = $textSize; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setTextColor($textColor) { $this->textColor = $textColor; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setWaterPerPos($waterPerPos) { $this->waterPerPos = $waterPerPos; } /** * @param !CodeTemplates.settercomment.paramtagcontent! */ public function setTextPerPos($textPerPos) { $this->textPerPos = $textPerPos; } } ?>
配置文件 waterImg.conf.php
<? #生成水印前请备份文件 #背景路径 绝对路径 $bgPath='C:/Users/skyling/Desktop/ypyt'; #水印图片 #可设置多张 /*格式如下 waterImg [0] 可为相对或绝对路径 string waterImg [1] 位置 上左百分比位置 0-1 array(1,1) waterImg [2] 缩放大小 0-1 若无需改变大小请默认为1 因为浏览器支持不同情慎用保持值为1 * */ $waterImg = array( array( "logo.png", array(0.02,0.02), 1 ), array( "text.png", array(0.3,0.4), 1 ) ); #文字水印 #可设置多个 /*参数格式: $waterText [0] 文字 $waterText [1] 位置 上左百分比位置 0-1 array(1,1) $waterText [2] 大小 1-5 $waterText [3] 颜色 #000000 */ $waterText = array( array( 'hello', array(0.1,0.9), 2, '#ffffff' ) ); ?>
相关文章推荐
- 一套pdf水印处理软件,支持转图片,转文字,添加图片水印,文字水印,设置水印图片,设置字体
- PHP水印类,支持添加图片、文字、填充颜色区域的实现
- PHP水印类,支持添加图片、文字、填充颜色区域
- PHP水印类,支持添加图片、文字、填充颜色区域
- php图像处理类,上传,压缩,添加文字、图片水印
- PHP图片水印函数:支持以图片和文字方式添加水印
- PHP图片水印函数:支持以图片和文字方式添加水印
- php图片添加文字水印实现代码
- PHP 图片添加水印(文字和图片)
- PHP 上传图片,生成水印,支持文字, gif, png
- php给图片添加文字水印
- php 图片操作类,支持生成缩略图,添加水印,上传缩略图
- PHP图片加水印类,支持文字水印、透明度设置、自定义水印类
- php 图片添加文字水印 以及 图片合成(微信快码传播)
- php给图片添加文字水印方法汇总
- php图片添加文字水印实现代码
- php面向对象与面向过程两种方法给图片添加文字水印
- PHP 上传图片,生成水印,支持文字, gif, png
- PHP图像处理函数:文字水印,图片水印,缩略图(等比缩放)
- PHP图片处理之使用imagecopy函数添加图片水印实例