PHP 图片水印类
<?php
/**
* 加水印类,支持文字图片水印的透明度设置、水印图片背景透明。
* $obj = new WaterMask($imgFileName); //实例化对象
* $obj->$waterType = 1; //类型:0为文字水印、1为图片水印
* $obj->$transparent = 45; //水印透明度
* $obj->$waterStr = 'www.itwhy.org'; //水印文字
* $obj->$fontSize = 16; //文字字体大小
* $obj->$fontColor = array(255,0255); //水印文字颜色(RGB)
* $obj->$fontFile = = 'AHGBold.ttf'; //字体文件
* $obj->output(); //输出水印图片文件覆盖到输入的图片文件
*/
class WaterMask{
public $waterType = ; //水印类型:0为文字水印、1为图片水印
public $pos = ; //水印位置
public $transparent = ; //水印透明度 public $waterStr = 'www.itwhy.org'; //水印文字
public $fontSize = ; //文字字体大小
public $fontColor = array(,,); //水印文字颜色(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[]) {
case :
$this->im = imagecreatefrompng($this->srcImg);
break ;
case :
$this->im = imagecreatefromjpeg($this->srcImg);
break ;
case :
$this->im = imagecreatefromgif($this->srcImg);
break ;
default:
die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterimginfo() { //获取水印图片的信息,并载入图片。
$this->waterImg_info = getimagesize($this->waterImg);
switch ($this->waterImg_info[]) {
case :
$this->water_im = imagecreatefrompng($this->waterImg);
break ;
case :
$this->water_im = imagecreatefromjpeg($this->waterImg);
break ;
case :
$this->water_im = imagecreatefromgif($this->waterImg);
break ;
default:
die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterpos() { //水印位置算法
switch ($this->pos) {
case : //随机位置
$this->x = rand(,$this->srcImg_info[]-$this->waterImg_info[]);
$this->y = rand(,$this->srcImg_info[]-$this->waterImg_info[]);
break ;
case : //上左
$this->x = ;
$this->y = ;
break ;
case : //上中
$this->x = ($this->srcImg_info[]-$this->waterImg_info[])/;
$this->y = ;
break ;
case : //上右
$this->x = $this->srcImg_info[]-$this->waterImg_info[];
$this->y = ;
break ;
case : //中左
$this->x = ;
$this->y = ($this->srcImg_info[]-$this->waterImg_info[])/;
break ;
case : //中中
$this->x = ($this->srcImg_info[]-$this->waterImg_info[])/;
$this->y = ($this->srcImg_info[]-$this->waterImg_info[])/;
break ;
case : //中右
$this->x = $this->srcImg_info[]-$this->waterImg_info[];
$this->y = ($this->srcImg_info[]-$this->waterImg_info[])/;
break ;
case : //下左
$this->x = ;
$this->y = $this->srcImg_info[]-$this->waterImg_info[];
break ;
case : //下中
$this->x = ($this->srcImg_info[]-$this->waterImg_info[])/;
$this->y = $this->srcImg_info[]-$this->waterImg_info[];
break ;
default: //下右
$this->x = $this->srcImg_info[]-$this->waterImg_info[];
$this->y = $this->srcImg_info[]-$this->waterImg_info[];
break ;
}
}
private function waterimg() {
if ($this->srcImg_info[] <= $this->waterImg_info[] || $this->srcImg_info[] <= $this->waterImg_info[]){
die('水印比原图大!');
}
$this->waterpos();
$cut = imagecreatetruecolor($this->waterImg_info[],$this->waterImg_info[]);
imagecopy($cut,$this->im,,,$this->x,$this->y,$this->waterImg_info[],$this->waterImg_info[]);
$pct = $this->transparent;
imagecopy($cut,$this->water_im,,,,,$this->waterImg_info[],$this->waterImg_info[]);
imagecopymerge($this->im,$cut,$this->x,$this->y,,,$this->waterImg_info[],$this->waterImg_info[],$pct);
}
private function waterstr() {
$rect = imagettfbbox($this->fontSize,,$this->fontFile,$this->waterStr);
$w = abs($rect[]-$rect[]);
$h = abs($rect[]-$rect[]);
$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,,,,);
imagefill($this->water_im,,,$white_alpha);
$color = imagecolorallocate($this->water_im,$this->fontColor[],$this->fontColor[],$this->fontColor[]);
imagettftext($this->water_im,$this->fontSize,,,$this->fontSize,$color,$this->fontFile,$this->waterStr);
$this->waterImg_info = array(=>$w,=>$h);
$this->waterimg();
}
function output() {
$this->imginfo();
if ($this->waterType == ) {
$this->waterstr();
}else {
$this->waterimginfo();
$this->waterimg();
}
switch ($this->srcImg_info[]) {
case :
imagepng($this->im,$this->srcImg);
break ;
case :
imagejpeg($this->im,$this->srcImg);
break ;
case :
imagegif($this->im,$this->srcImg);
break ;
default:
die('添加水印失败!');
break;
}
imagedestroy($this->im);
imagedestroy($this->water_im);
}
}
?>
PHP 图片水印类的更多相关文章
- 不错.net图片水印类
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Draw ...
- C#图片水印类
这个是学习用的呃,主要看一下水印在修改图片中距左边的宽度和高度是杂弄的就哦客了. using System; using System.Collections.Generic; using Syste ...
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- java常用开发工具类之 图片水印,文字水印,缩放,补白工具类
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- php使用GD库实现图片水印和缩略图——封装成类
学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...
- PHP的图片处理类(缩放、加图片水印和剪裁)
<!--test.php文件内容--> <?php //包含这个类image.class.php include "image.class.php"; $img ...
- 图片水印工具类java
关于jar包的导入我就不多说了,我会把引入的jar包显示出来,大家自行Google package com.net.util; import java.awt.AlphaComposite; impo ...
- pdo文字水印类,验证码类,缩略图类,logo类
文字水印类 image.class.php <?php /** * webrx.cn qq:7031633 * @author webrx * @copyright copyright (c) ...
- PHP水印类
<?php /** * 水印类 * @author zhaoyingnan 2015/07/16 **/ include_once('extend.php'); class Watermark_ ...
随机推荐
- [Angularjs]ng-switch用法
用法描述 ng-switch根据表达式的值显示或这隐藏对应部分.类似c#或者其他预览里面的switch用法.可以慢慢体会. 说道ng-switch就要说到子元素该怎么根据当前值进行变化.子元素可以通过 ...
- glut64位操作系统安装
64位win7下OpenGL的配置 - walkandthink的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/walkandthink/article/detai ...
- Linux netstat详解
做计算机管理员,我们都必要了解一下netstat这个命令,它是一个查看网络连接状态的工具,在windows下也默认有这个工具.Netstat命令详解 netstat命令怎样使用 如何关闭TIME_WA ...
- Shell脚本中cd命令使用
在写shell脚本的时候发现cd切换目录的时候无法切换,代码是下面的. #!/bin/bash #changedir.sh history cd /home/firefox sleep pwd 我仔细 ...
- ubuntu上完全卸载package
inux上完整的卸载apt方式安装软件的办法. 假设你的包叫做: your_pkg apt-get --purge remove your_pkg apt-get autoremove apt-get ...
- 常州Day4题解
1. 高精度 这题略水,字符串可过,还不加压位等,操作只有BitShift和add/sub,不过编程复杂度有些高.(输出都是二进制我能说些什么...) 2. N皇后问题 (警告! 不是平时你见到的N皇 ...
- 在Java中>、>>、>>>三者的区别
Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力 ...
- (int),Int32.Parse() 和 Convert.toInt32() 的区别
在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...
- poj 1328
http://poj.org/problem?id=1328 题意:题目大概意思就是有一群孤岛,想要用雷达来监视这些岛屿,但雷达的范围是有限的,所以需要多个雷达,题目就是要你解决最少需要几个雷达,注意 ...
- Android 中的selector
今天做程序时,发现了selector 选择器不单单能用系统的自定义属性(比如, <item android:state_selected="true" android:co ...