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); } } ?> |
是不是这样操作就很简单了,如果还需要其他操作,只需要再往这个类里面添加就好啦~~希望大家可以熟练掌握。