赞
踩
这几天学习了一下GD扩展库,昨天写了一个图片验证码,今天继续写了一个给图片增加水印的类。
先来看一下什么是水印:
水印,是指在造纸过程中形成的,“夹”在纸中而不是在纸的表面,迎光透视时可以清晰看到有明暗纹理的图形、人像或文字,它是纸张在生产过程中用改变纸浆纤维密度的方法而制成的。通常人民币、购物卷、粮票、证劵等等,都采用此方式,以防止造假
类似的,图片水印就是在自己制作的图片或自己网站的图片上贴上一个标签 , 表明作者信息或网站信息,也可以防止别人盗用。
通常水印可以是文字或者另一图片,并且有一定透明度,不影响原图的查看。
这里的水印可以是文字或者是图片。
1. 打开需要处理的图片
2. 计算水印的位置
3. 增加水印(文字或图片)
4. 保存新图片
5. 释放资源(可以省略,php可以自动释放)
打开和关闭图片就不说了,这里说的是处理图片水印所需要的GD函数
1.计算文本框大小所需要的函数:
array imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $extrainfo ] )
该函数返回文本框四个角的坐标,利用这些坐标就可以计算出文本的宽度和高度了。
2.计算图片大小所需要的函数:
int imagesx ( resource $image )
int imagesy ( resource $image )
imagesx 返回图片宽度,imagesy 返回图片高度
3.贴图函数1
bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
说明:
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
4.贴图函数2
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
说明:
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
5.添加文字水印
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
说明:使用 TrueType 字体将 指定的 text 写入图像。
更详细的说明:请戳这里
下面的图片水印类所实现的功能:
1. 增加文字水印
2. 增加图片水印
3. 保存水印后的图片
4. 输出水印后的图片
5. 可以在9个固定位置增加水印:左上、上中、右上、左中、居中、右中、左下、下中、右下
使用时需要注意的问题:
1.水印图片或者文字大小不能超过原图的大小,否则会处理失败。
2.保存图片和输出到浏览器同时使用时,需要先输出到浏览器,不然无法保存。
图片水印类代码:ImageStamp.class.php
<?php
/**
* 图片水印类
* 支持文字水印和图片水印, 支持水印透明度设置
* 支持的图片类型: 'jpg', 'png', 'gif'
* @author luoluolzb 2017/6/17
*/
class ImageStamp
{
/**
* 确定水印位置的常量
* @var const
*/
const
STAMP_TOP = 1,
STAMP_BOTTOM = 2,
STAMP_LEFT = 4,
STAMP_RIGHT = 8,
STAMP_CENTER = 16;
/**
* 水印距离图片边缘的距离(非居中时)常量
* @var const
*/
const STAMP_SIDE = 10;
/**
* 水印默认位置
* @var const
*/
const STAMP_DEFAULT_LOC = 10; //STAMP_BOTTOM | STAMP_RIGHT
/**
* @var private
*/
private $fileName, $mimeString, $imgRes;
private $imgWidth, $imgHeight;
/**
* 打开需要加水印的图片
* 此函数可以多次使用, 第二次会覆盖第一次
* @param string $fileName 图片文件
* @return bool 操作结果
*/
public function Open($fileName){
if(!file_exists($fileName)){
return false;
}
if($this->imgRes){
imagedestroy($this->imgRes);
}
$this->fileName = $fileName;
$this->mimeString = self::GetImageMime($fileName);
$this->imgRes = self::ImageCreate($fileName, $this->mimeString);
if(! $this->imgRes){
return false;
}
$this
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。