php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法。
操作图片主要历经四个步骤:
1、打开图片
2、操作图片
3、输出图片
4、销毁图片
1,3,4三个步骤每次都要写,每次又都差不多。真正需要变通的只有操作图片的这一步骤了。操作图片又往往通过1或多个主要的GD函数来完成。
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
|
<?php
class Image
{
private $info ;
private $image ;
public $type ;
public function __construct( $src )
{
$this ->info= getimagesize ( $src );
$this ->type=image_type_to_extension( $this ->info[ '2' ],false);
$fun = "imagecreatefrom{$this->type}" ;
$this ->image= $fun ( $src );
}
/**
* 文字水印
* @param [type] $font 字体
* @param [type] $content 内容
* @param [type] $size 文字大小
* @param [type] $col 文字颜色(四元数组)
* @param array $location 位置
* @param integer $angle 倾斜角度
* @return [type]
*/
public function fontMark( $font , $content , $size , $col , $location , $angle =0){
$col =imagecolorallocatealpha( $this ->image, $col [ '0' ], $col [ '1' ], $col [ '2' ], $col [ '3' ]);
imagettftext( $this ->image, $size , $angle , $location [ '0' ], $location [ '1' ], $col , $font , $content );
}
/**
* 图片水印
* @param [type] $imageMark 水印图片地址
* @param [type] $dst 水印图片在原图片中的位置
* @param [type] $pct 透明度
* @return [type]
*/
public function imageMark( $imageMark , $dst , $pct ){
$info2 = getimagesize ( $imageMark );
$type =image_type_to_extension( $info2 [ '2' ],false);
$func2 = "imagecreatefrom" . $type ;
$water = $func2 ( $imageMark );
imagecopymerge( $this ->image, $water , $dst [0], $dst [1], 0, 0, $info2 [ '0' ], $info2 [ '1' ], $pct );
imagedestroy( $water );
}
/**
* 压缩图片
* @param [type] $thumbSize 压缩图片大小
* @return [type] [description]
*/
public function thumb( $thumbSize ){
$imageThumb =imagecreatetruecolor( $thumbSize [0], $thumbSize [1]);
imagecopyresampled( $imageThumb , $this ->image, 0, 0, 0, 0, $thumbSize [0], $thumbSize [1], $this ->info[ '0' ], $this ->info[ '1' ]);
imagedestroy( $this ->image);
$this ->image= $imageThumb ;
}
/**
* 裁剪图片
* @param [type] $cutSize 裁剪大小
* @param [type] $location 裁剪位置
* @return [type] [description]
*/
public function cut( $cutSize , $location ){
$imageCut =imagecreatetruecolor( $cutSize [0], $cutSize [1]);
imagecopyresampled( $imageCut , $this ->image, 0, 0, $location [0], $location [1], $cutSize [0], $cutSize [1], $cutSize [0], $cutSize [1]);
imagedestroy( $this ->image);
$this ->image= $imageCut ;
}
/**
* 展现图片
* @return [type] [description]
*/
public function show(){
header( "content-type:" . $this ->info[ 'mime' ]);
$funn = "image" . $this ->type;
$funn ( $this ->image);
}
/**
* 保存图片
* @param [type] $newname 新图片名
* @return [type] [description]
*/
public function save( $newname ){
header( "content-type:" . $this ->info[ 'mime' ]);
$funn = "image" . $this ->type;
$funn ( $this ->image, $newname . '.' . $this ->type);
}
public function __destruct(){
imagedestroy( $this ->image);
}
}
?>
|
是不是这样操作就很简单了,如果还需要其他操作,只需要再往这个类里面添加就好啦~~希望大家可以熟练掌握。