1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?php
// +----------------------------------------------------------------------
// | TOPThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2010 http://topthink.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
// | ThinkImage.class.php 2013-03-05
// +----------------------------------------------------------------------
namespace Think;
/**
* 图片处理驱动类,可配置图片处理库
* 目前支持GD库和imagick
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
class Image{
/* 驱动相关常量定义 */
const IMAGE_GD = 1; //常量,标识GD库类型
const IMAGE_IMAGICK = 2; //常量,标识imagick库类型
/* 缩略图相关常量定义 */
const IMAGE_THUMB_SCALE = 1 ; //常量,标识缩略图等比例缩放类型
const IMAGE_THUMB_FILLED = 2 ; //常量,标识缩略图缩放后填充类型
const IMAGE_THUMB_CENTER = 3 ; //常量,标识缩略图居中裁剪类型
const IMAGE_THUMB_NORTHWEST = 4 ; //常量,标识缩略图左上角裁剪类型
const IMAGE_THUMB_SOUTHEAST = 5 ; //常量,标识缩略图右下角裁剪类型
const IMAGE_THUMB_FIXED = 6 ; //常量,标识缩略图固定尺寸缩放类型
/* 水印相关常量定义 */
const IMAGE_WATER_NORTHWEST = 1 ; //常量,标识左上角水印
const IMAGE_WATER_NORTH = 2 ; //常量,标识上居中水印
const IMAGE_WATER_NORTHEAST = 3 ; //常量,标识右上角水印
const IMAGE_WATER_WEST = 4 ; //常量,标识左居中水印
const IMAGE_WATER_CENTER = 5 ; //常量,标识居中水印
const IMAGE_WATER_EAST = 6 ; //常量,标识右居中水印
const IMAGE_WATER_SOUTHWEST = 7 ; //常量,标识左下角水印
const IMAGE_WATER_SOUTH = 8 ; //常量,标识下居中水印
const IMAGE_WATER_SOUTHEAST = 9 ; //常量,标识右下角水印
/**
* 图片资源
* @var resource
*/
private $img;
/**
* 构造方法,用于实例化一个图片处理对象
* @param string $type 要使用的类库,默认使用GD库
*/
public function __construct($type = self::IMAGE_GD, $imgname = null){
/* 判断调用库的类型 */
switch ($type) {
case self::IMAGE_GD:
$class = 'Gd';
break;
case self::IMAGE_IMAGICK:
$class = 'Imagick';
break;
default:
E('不支持的图片处理库类型');
}
/* 引入处理库,实例化图片处理对象 */
$class = "Think\\Image\\Driver\\{$class}";
$this->img = new $class($imgname);
}
/**
* 打开一幅图像
* @param string $imgname 图片路径
* @return Object 当前图片处理库对象
*/
public function open($imgname){
$this->img->open($imgname);
return $this;
}
/**
* 保存图片
* @param string $imgname 图片保存名称
* @param string $type 图片类型
* @param integer $quality 图像质量
* @param boolean $interlace 是否对JPEG类型图片设置隔行扫描
* @return Object 当前图片处理库对象
*/
public function save($imgname, $type = null, $quality=80,$interlace = true){
$this->img->save($imgname, $type, $quality,$interlace);
return $this;
}
/**
* 返回图片宽度
* @return integer 图片宽度
*/
public function width(){
return $this->img->width();
}
/**
* 返回图片高度
* @return integer 图片高度
*/
public function height(){
return $this->img->height();
}
/**
* 返回图像类型
* @return string 图片类型
*/
public function type(){
return $this->img->type();
}
/**
* 返回图像MIME类型
* @return string 图像MIME类型
*/
public function mime(){
return $this->img->mime();
}
/**
* 返回图像尺寸数组 0 - 图片宽度,1 - 图片高度
* @return array 图片尺寸
*/
public function size(){
return $this->img->size();
}
/**
* 裁剪图片
* @param integer $w 裁剪区域宽度
* @param integer $h 裁剪区域高度
* @param integer $x 裁剪区域x坐标
* @param integer $y 裁剪区域y坐标
* @param integer $width 图片保存宽度
* @param integer $height 图片保存高度
* @return Object 当前图片处理库对象
*/
public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = null){
$this->img->crop($w, $h, $x, $y, $width, $height);
return $this;
}
/**
* 生成缩略图
* @param integer $width 缩略图最大宽度
* @param integer $height 缩略图最大高度
* @param integer $type 缩略图裁剪类型
* @return Object 当前图片处理库对象
*/
public function thumb($width, $height, $type = self::IMAGE_THUMB_SCALE){
$this->img->thumb($width, $height, $type);
return $this;
}
/**
* 添加水印
* @param string $source 水印图片路径
* @param integer $locate 水印位置
* @param integer $alpha 水印透明度
* @return Object 当前图片处理库对象
*/
public function water($source, $locate = self::IMAGE_WATER_SOUTHEAST,$alpha=80){
$this->img->water($source, $locate,$alpha);
return $this;
}
/**
* 图像添加文字
* @param string $text 添加的文字
* @param string $font 字体路径
* @param integer $size 字号
* @param string $color 文字颜色
* @param integer $locate 文字写入位置
* @param integer $offset 文字相对当前位置的偏移量
* @param integer $angle 文字倾斜角度
* @return Object 当前图片处理库对象
*/
public function text($text, $font, $size, $color = '#00000000',
$locate = self::IMAGE_WATER_SOUTHEAST, $offset = 0, $angle = 0){
$this->img->text($text, $font, $size, $color, $locate, $offset, $angle);
return $this;
}
}