php实现常见图片格式的水印和缩略图制作(面向对象)

2025-05-29 0 72

本文实例为大家分享了php水印缩略图制作代码,使用面向对象的方法来实现常见图片格式jpg,png,gif的水印缩略图的制作,供大家参考,具体内容如下

?

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

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285
<?php

header('Content-Type:text/html;charset=utf-8');

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

//给图片添加水印

Class Water{

//开启水印

private $watermark_on = '1';

public $water_img;

//水印位置

public $pos = 1;

//压缩比

public $pct = 80;

//透明度

public $quality = 80;

public $text = '乐趣网zlblog.sinaapp.com';

public $size = 12;

public $color = '#000000';

public $font = 'font.ttf';

//thumb的制作

//默认缩略图功能开启

private $thumb_on = 1;

//生成缩略图的方式

public $thumb_type = 1;

//生成缩略图的宽度

public $thumb_width;

//生成缩略图的高度

public $thumb_height;

//生成缩略图的后缀名

public $thumb_fix = '_dq';

//缩略图函数处理

public function thumb( $img,$outfile='',$t_type='',$t_w='',$t_h='' ){

//验证图片是否符合要求

if(!$this->check($img) || !$this->thumb_on) return FALSE;

//定义缩略图的初始值

$t_type = $t_type ? $t_type : $this->thumb_type;

$t_w = $t_w ? $t_w : $this->thumb_width;

$t_h = $t_h ? $t_h : $this->thumb_height;

//获取到原图的信息

$img_info = getimagesize($img);

$img_w = $img_info[0];

$img_h = $img_info[1];

//取得图像类型的文件后缀

$img_type = image_type_to_extension($img_info[2]);

//获取到相关尺寸

$thumb_size = $this->thumb_size($img_w,$img_h,$t_w,$t_h,$t_type);

//确定原始图像类型

//利用自定义函数来实现图片类型的确定

$func = "imagecreatefrom".substr($img_type, 1);

$res_img = $func($img);

//缩略图资源 编辑图片资源moon

if( $img_type == '.gif' || $img_type == '.png' ){

$res_thumb = imagecreate($thumb_size[0], $thumb_size[1]);

$color = imagecolorallocate($res_thumb, 255, 0, 0);

}else{

$res_thumb = imagecreatetruecolor($thumb_size[0], $thumb_size[1]);

}

//制作缩略图

if(function_exists( "imagecopyresampled" ) ){

imagecopyresampled($res_thumb, $res_img, 0, 0, 0, 0, $thumb_size[0],$thumb_size[1],$thumb_size[2],$thumb_size[3]);

}else{

imagecopyresized($res_thumb, $res_img, 0, 0, 0, 0, $thumb_size[0],$thumb_size[1],$thumb_size[2],$thumb_size[3]);

}

//处理透明色

if( $img_type =='.gif' || $img_type == '.png' ){

imagecolortransparent($res_thumb,$color);

}

//配置输出文件名

$outfile = $outfile ? $outfile : $outfile.substr($img,0,strripos($img,'.')).$this->thumb_fix.$img_type;

//文件的保存输出

$func = "image".substr($img_type, 1);

$func($res_thumb,$outfile);

if(isset($res_thumb)) imagedestroy ($res_thumb);

if(isset($res_img)) imagedestroy ($res_img);

return $outfile;

}

public function watermark( $img,$pos='',$out_img='',$water_img='',$text='' ){

if(!$this->check($img) || !$this->watermark_on) return false;

$water_img = $water_img ? $water_img : $this->water_img;

//水印的开启状态

$waterimg_on = $this->check($water_img) ? 1 : 0;

//判断是否在原图上操作

$out_img = $out_img ? $out_img : $img;

//判断水印的位置

$pos = $pos ? $pos : $this->pos;

//水印文字

$text = $text ? $text : $this->text;

$img_info = getimagesize($img);

$img_w = $img_info[0];

$img_h = $img_info[1];

//判断水印图片的类型

if( $waterimg_on ){

$w_info = getimagesize($water_img);

$w_w = $w_info[0];

$w_h = $w_info[1];

if ( $img_w < $w_w || $img_h < $w_h ) return false;

switch ( $w_info[2] ){

case 1:

$w_img = imagecreatefromgif($water_img);

break;

case 2:

$w_img = imagecreatefromjpeg($water_img);

break;

case 3:

$w_img = imagecreatefrompng($water_img);

break;

}

}else{

if( empty($text) || strlen($this->color)!=7 ) return FALSE;

$text_info = imagettfbbox($this->size, 0, $this->font, $text);

$w_w = $text_info[2] - $text_info[6];

$w_h = $text_info[3] - $text_info[7];

}

//建立原图资源

switch ( $img_info[2] ){

case 1:

$res_img = imagecreatefromgif($img);

break;

case 2:

$res_img = imagecreatefromjpeg($img);

break;

case 3:

$res_img = imagecreatefrompng($img);

break;

}

//确定水印的位置

switch ( $pos ){

case 1:

$x = $y =25;

break;

case 2:

$x = ($img_w - $w_w)/2;

$y = 25;

break;

case 3:

$x = $img_w - $w_w;

$y = 25;

break;

case 4:

$x = 25;

$y = ($img_h - $w_h)/2;

break;

case 5:

$x = ($img_w - $w_w)/2;

$y = ($img_h - $w_h)/2;

break;

case 6:

$x = $img_w - $w_w;

$y = ($img_h - $w_h)/2;

break;

case 7:

$x = 25;

$y = $img_h - $w_h;

break;

case 8:

$x = ($img_w - $w_w)/2;

$y = $img_h - $w_h;

break;

case 9:

$x = $img_w - $w_w;

$y = $img_h - $w_h;

break;

default :

$x = mt_rand(25, $img_w - $w_w);

$y = mt_rand(25, $img_h - $w_h);

}

//写入图片资源

if( $waterimg_on ){

imagecopymerge($res_img, $w_img, $x, $y, 0, 0, $w_w, $w_h, $this->pct);

}else{

$r = hexdec(substr($this->color, 1,2));

$g = hexdec(substr($this->color, 3,2));

$b = hexdec(substr($this->color, 5,2));

$color = imagecolorallocate($res_img, $r, $g, $b);

imagettftext($res_img, $this->size, 0, $x, $y, $color, $this->font, $text);

}

//生成图片类型

switch ( $img_info[2] ){

case 1:

imagecreatefromgif($res_img,$out_img);

break;

case 2:

//imagecreatefromjpeg($res_img,$out_img);

imagejpeg($res_img,$out_img);

break;

case 3:

imagepng($res_img,$out_img);

break;

}

if(isset($res_img)) imagedestroy ($res_img);

if(isset($w_img)) imagedestroy($w_img);

return TRUE;

}

//验证图片是否存在

private function check($img){

$type = array('.jpg','.jpeg','.png','.gif');

$img_type = strtolower(strrchr($img, '.'));

return extension_loaded('gd') && file_exists($img) && in_array($img_type, $type);

}

//获取缩略图的相关比例

//获取到图片的处理类型

private function thumb_size( $img_w,$img_h,$t_w,$t_h,$t_type){

//定义缩略图尺寸

$w = $t_w;

$h = $t_h;

//定义图片的原始尺寸

$cut_w = $img_w;

$cut_h = $img_h;

//当要目标图像小于缩略图的尺寸时;

if( $img_w <= $t_w && $img_h < $t_h ){

$w = $img_w;

$h = $img_h;

}else{

if( !empty($t_type) && $t_type>0 ){

switch ( $t_type ){

//当宽度固定时

case 1:

$h = $t_w/$img_w*$img_h;

break;

//高度固定时

case 2:

$w = $t_h/$img_h*$img_w;

break;

//宽度固定,高度裁切

case 3:

$cut_h = $img_w/$t_w*$t_h;

break;

//高度固定,宽度裁切

case 4:

$cut_w = $img_h/$t_h*$t_w;

break;

//等比例缩放

default :

if( ($img_w/$t_w) > ($img_h/$t_h) ){

$h = $t_w/$img_w*$t_h;

}elseif( ($img_w/$t_w) < ($img_h/$t_h) ){

$w = $t_h/$img_h*$t_w;

}else{

$w = $t_w;

$h = $t_h;

}

}

}

}

$arr[0] = $t_w;

$arr[1] = $t_h;

$arr[2] = $cut_w;

$arr[3] = $cut_h;

return $arr;

}

}

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php实现常见图片格式的水印和缩略图制作(面向对象) https://www.kuaiidc.com/97810.html

相关文章

发表评论
暂无评论