分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

PHP的生成图片或文字水印的类

发布时间:2023-09-06 02:28责任编辑:郭大石关键词:PHP


ImageWatermark.php

<?php/***********************************************************类名:ImageWatermark功能:用于生成图片或文字水印WDPHP素材源码 http://www.wdphp.com************************************************************合成水印:1、图像水印appendImageMark(暂不可旋转)2、文字水印appendTextMark(汉字水印需要设置汉字字体)(可旋转)输出水印图像:write($filename=null)1、输出到文件:指定$filename参数为输出的文件名。2、输出到浏览器:不指定输出文件名,则输出到浏览器.指定水印位置:1、指定位置类型$markPosType:(default-0)1-top left ????2-top center ????3-top right4-middle left ?5-middle center ?6-middle right7-bottom left ?8-bottom center ?9-bottom right0-random2、设置具体位置setMarkPos($x,$y),若指定具体位置,则上面的位置类型无效。*************************************************************/class ImageWatermark { ???public $markPosType = 0; //水印位置,缺省为随机位置输出水印 ???public $fontFile = ‘arial.ttf‘; //字体文件名 ???public $color = ‘#CCCCCC‘; //水印字体的颜色 ???public $fontSize = 12; //水印字体大小 ???public $angle = 0; //水印文字旋转的角度 ???private $markPos = array(); ???private $markImageFile = null, $destImageFile = null; ???private $mark_res = null, $mark_width = 0, $mark_height = 0, $mark_type = null; ???private $dest_res = null, $dest_width = 0, $dest_height = 0, $dest_type = null; ???//用目标图片作为构造函数的参数 ???public function __construct($destImage) { ???????if (!file_exists($destImage)) return false; ???????$this->destImageFile = $destImage; ???????//获取图片大小、类型 ???????$imageInfo = getimagesize($this->destImageFile); ???????$this->dest_width = $imageInfo[0]; ???????$this->dest_height = $imageInfo[1]; ???????$this->dest_type = $imageInfo[2]; ???????//得到图片资源句柄 ???????$this->dest_res = $this->getImageResource($this->destImageFile, $this->dest_type); ???} ???public function __destruct() { ???????imagedestroy($this->dest_res); ???} ???//添加文字水印 ???public function appendTextMark($markText) { ???????if ($markText == null) return false; ???????//计算水印文本的大小 ???????$box = imagettfbbox($this->fontSize, $this->angle, $this->fontFile, $markText); ???????$this->mark_width = $box[2] - $box[6]; ???????$this->mark_height = $box[3] - $box[7]; ???????//计算水印位置 ???????$pos = ($this->markPos != null) ? $this->markPos : $this->getMarkPosition($this->markPosType); ???????$pos[1]+= $this->mark_height; ???????//将文字打印到图片上 ???????$RGB = $this->colorHexRgb($this->color); ???????$imageColor = imagecolorallocate($this->dest_res, $RGB[0], $RGB[1], $RGB[2]); ???????imagettftext($this->dest_res, $this->fontSize, $this->angle, $pos[0], $pos[1], $imageColor, $this->fontFile, $markText); ???} ???//添加图片水印 ???public function appendImageMark($markImage) { ???????if (!file_exists($markImage)) return false; ???????$this->markImageFile = $markImage; ???????//获取水印图片大小、类型 ???????$imageInfo = getimagesize($this->markImageFile); ???????$this->mark_width = $imageInfo[0]; ???????$this->mark_height = $imageInfo[1]; ???????$this->mark_type = $imageInfo[2]; ???????//得到图片资源句柄 ???????$this->mark_res = $this->getImageResource($this->markImageFile, $this->mark_type); ???????//计算水印位置 ???????$pos = ($this->markPos != null) ? $this->markPos : $this->getMarkPosition($this->markPosType); ???????//设置图像混色模式 ???????imagealphablending($this->dest_res, true); ???????//复制叠加图像 ???????imagecopy($this->dest_res, $this->mark_res, $pos[0], $pos[1], 0, 0, $this->mark_width, $this->mark_height); ???????imagedestroy($this->mark_res); ???} ???//将叠加水印后的图片写入指定文件,若不定文件名,则输出到浏览器 ???public function write($filename = null) { ???????$this->writeImage($this->dest_res, $filename, $this->dest_type); ???} ???//设置水印x,y坐标 ???public function setMarkPos($x, $y) { ???????$this->markPos[0] = $x; ???????$this->markPos[1] = $y; ???} ???//将十六进制的颜色值分解成RGB形式 ???private function colorHexRgb($color) { ???????$color = preg_replace(‘/#/‘, ‘‘, $color); ???????$R = hexdec($color[0] . $color[1]); ???????$G = hexdec($color[2] . $color[3]); ???????$B = hexdec($color[4] . $color[5]); ???????return array( ???????????$R, ???????????$G, ???????????$B ???????); ???} ???//计算水印位置 ???private function getMarkPosition($type = 0) { ???????switch ($type) { ???????????case 0: ???????????????$x = rand(0, $this->dest_width - $this->mark_width); ???????????????$y = rand(0, $this->dest_height - $this->mark_height); ???????????????break; //random ???????????????????????????case 1: ???????????????$x = 0; ???????????????$y = 0; ???????????????break; //topleft ???????????????????????????case 2: ???????????????$x = ($this->dest_width - $this->mark_width) / 2; ???????????????$y = 0; ???????????????break; //topcenter ???????????????????????????case 3: ???????????????$x = $this->dest_width - $this->mark_width; ???????????????$y = 0; ???????????????break; // topright ???????????????????????????case 4: ???????????????$x = 0; ???????????????$y = ($this->dest_height - $this->mark_height) / 2; ???????????????break; //middleleft ???????????????????????????case 5: ???????????????$x = ($this->dest_width - $this->mark_width) / 2; ???????????????$y = ($this->dest_height - $this->mark_height) / 2; ???????????????break; //middlecenter ???????????????????????????case 6: ???????????????$x = $this->dest_width - $this->mark_width; ???????????????$y = ($this->dest_height - $this->mark_height) / 2; ???????????????break; //middleright ???????????????????????????case 7: ???????????????$x = 0; ???????????????$y = $this->dest_height - $this->mark_height; ???????????????break; //bottomleft ???????????????????????????case 8: ???????????????$x = ($this->dest_width - $this->mark_width) / 2; ???????????????$y = $this->dest_height - $this->mark_height; ???????????????break; //bottomcenter ???????????????????????????case 9: ???????????????$x = $this->dest_width - $this->mark_width; ???????????????$y = $this->dest_height - $this->mark_height; ???????????????break; //bottomright ???????????????????????????default: ???????????????$x = rand(0, $this->dest_width - $this->mark_width); ???????????????$y = rand(0, $this->dest_height - $this->mark_height); ???????????????break; //random ???????????????????????} ???????return array( ???????????$x, ???????????$y ???????); ???} ???//从一个图像文件中取得图片资源标识符 ???private function getImageResource($filename, $type = 0) { ???????switch ($type) { ???????????case 1: ???????????????return imagecreatefromgif($filename); ???????????????break; ???????????case 2: ???????????????return imagecreatefromjpeg($filename); ???????????????break; ???????????case 3: ???????????????return imagecreatefrompng($filename); ???????????????break; ???????????????// 以后可添加其它格式 ???????????????????????????default: ???????????????return null; ???????} ???} ???//将图像写入文件或输出到浏览器 ???private function writeImage($ImageRes, $filename = null, $type = 0) { ???????switch ($type) { ???????????case 1: ???????????????imagegif($ImageRes, $filename); ???????????????break; ???????????case 2: ???????????????imagejpeg($ImageRes, $filename); ???????????????break; ???????????case 3: ???????????????imagepng($ImageRes, $filename); ???????????????break; ???????????default: ???????????????return null; ???????} ???????return true; ???}}//使用示例$markimg = new ImageWatermark(‘c_si.jpg‘);//$markimg->setMarkPos(100,200);//如何设置setMarkPos,则markPosType无效。$markimg->markPosType = 5;$markimg->appendImageMark(‘mark.png‘);$markimg->fontFile = ‘STCAIYUN.TTF‘;$markimg->color = ‘#FFFFFF‘;$markimg->fontSize = 24;$markimg->angle = 45; //设置角度时,注意水印可能旋转出目标图片之外。$markimg->appendTextMark(‘汉字水印‘);$markimg->write();$markimg = null;?>

PHP的生成图片或文字水印的类

原文地址:https://www.cnblogs.com/lovellll/p/10200535.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved