ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルに実装された一般的な画像処理クラス

php_PHP チュートリアルに実装された一般的な画像処理クラス

WBOY
WBOYオリジナル
2016-07-13 10:00:42804ブラウズ

PHPで実装された一般的な画像処理クラス

この記事では、画像のズーム、カット、フォトフレーム、ウォーターマーク、シャープ、回転、反転、透明化、反転などを実現できる、PHPで実装された一般的な画像処理クラスを中心に紹介します。色やその他の機能には特定の基準値があり、必要な友達はそれを参照できます

この記事の例では、PHP によって実装される一般的な画像処理クラスについて説明します。参考のためにみんなで共有してください。詳細は以下の通りです

画像処理機能機能:ズーム、カット、フォトフレーム、ウォーターマーク、シャープ、回転、反転、透明度、色反転、処理と履歴の保存アイデア:写真が変更されたときに新しい写真を自動的に生成し、名前を付ける追加を検討できます元の画像に基づくステップ (例: 画像名 + __ 番目のステップ)。 高度な画像処理機能を必要とする一部の Web アプリケーションでは、このクラスを参照できます。

?

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

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

クラス写真

{

var $PICTURE_URL;//処理される画像

var $DEST_URL="temp__01.jpg";//ターゲット画像の場所を生成します

var $PICTURE_CREATE;//作成される画像

var $TURE_COLOR;//新しいトゥルーカラー画像を作成します

var $PICTURE_WIDTH; //元の画像の幅

var $PICTURE_HEIGHT;//元の画像の高さ

/*

透かしのタイプ、デフォルトは透かしテキストです

*/

var $MARK_TYPE=1;

var $WORD;//UTF-8以降のテキスト

var $WORD_X //テキストの横軸

var $WORD_Y //テキストの座標

var $FONT_TYPE;//フォントタイプ

var $FONT_SIZE="12";//フォントサイズ

var $FONT_WORD;//テキスト

var $ANGLE=0;//テキストの角度、デフォルトは 0 です

var $FONT_COLOR="#000000";//テキストの色

var $FONT_PATH="font/simkai.ttf";//フォント ライブラリ、デフォルトは宋朝です

var $FORCE_URL;//透かし画像

var $FORCE_X=0; //ウォーターマークの横座標

var $FORCE_Y=0;//透かしの垂直座標

var $FORCE_START_X=0;//透かし画像の横軸を切り取る

var $FORCE_START_Y=0;//透かし付き画像の縦軸をカットします

var $PICTURE_TYPE;//画像タイプ

var $PICTURE_MIME;//出力ヘッダー

/*

拡大縮小率が1の場合、拡大縮小の高さと幅に従って拡大縮小します

*/

var $ZOOM=1;//ズームタイプ

var $ZOOM_MULTIPLE;//ズーム率

var $ZOOM_WIDTH;//ズーム幅

var $ZOOM_HEIGHT;//ズームの高さ

/*

長さと幅を比例的に固定してトリミング

*/

var $CUT_TYPE=1;//カットタイプ

var $CUT_X=0;//トリミングの横座標

var $CUT_Y=0;//トリミングの垂直座標

var $CUT_;//カット幅

var $CUT_HEIGHT=100 //切断高さ

;

/*

研ぐ

*/

var $SHARP="7.0";//シャープ度

/*

透明加工

*/

var $ALPHA='100' //透明度は 0 ~ 127 です

var $ALPHA_X="90";

var $ALPHA_Y="50";

/*

任意の角度で回転

*/

var $CIRCUMROTATE="90.0";//浮動小数点数である必要があることに注意してください

/*

エラーメッセージ

*/

var $ERROR=配列(

'unalviable'=>'関連する写真が見つかりません!'

);

/*

コンストラクター: 関数の初期化

*/

関数 __construct($PICTURE_URL)

{

$this->get_info($PICTURE_URL);

}

関数 get_info($PICTURE_URL)

{

/*

元の画像の情報を処理し、最初に画像が存在するかどうかを確認し、存在しない場合は、対応する情報が提供されます

*/

@$SIZE=getimagesize($PICTURE_URL);

if(!$SIZE)

{

exit($this->ERROR['unalviable']);

}

//元の画像の情報の種類、幅、高さを取得します

$this->PICTURE_MIME=$SIZE['mime'];

$this->PICTURE_;

$this->PICTURE_HEIGHT=$SIZE[1];

//画像を作成します

スイッチ($SIZE[2])

{

ケース1:

$this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);

$this->PICTURE_TYPE="imagejpeg";

$this->PICTURE_EXT="jpg";

休憩;

ケース2:

$this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL);

$this->PICTURE_TYPE="imagegif";

$this->PICTURE_EXT="gif";

休憩;

ケース 3:

$this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);

$this->PICTURE_TYPE="imagepng";

$this->PICTURE_EXT="png";

休憩;

}

/*

テキストの色を16進数から10進数に変換します

*/

preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);

if(count($MATCHES)==3)

{

$this->RED=hexdec($MATCHES[0][0]);

$this->GREEN=hexdec($MATCHES[0][1]);

$this->BLUE=hexdec($MATCHES[0][2]);

}

}

//__construct の終了

/*

16進数の色を10進数(R、G、B)に変換します

*/

関数 hex2dec()

{

preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);

if(count($MATCHES)==3)

{

$this->RED=hexdec($MATCHES[0][0]);

$this->GREEN=hexdec($MATCHES[0][1]);

$this->BLUE=hexdec($MATCHES[0][2]);

}

}

//ズームタイプ

関数zoom_type($ZOOM_TYPE)

{

$this->ZOOM=$ZOOM_TYPE;

}

//画像を拡大縮小します。高さと幅が指定されていない場合は拡大縮小されます

関数zoom()

{

//ズームサイズ

if($this->ZOOM==0)

{

$this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;

$this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;

}

//新しいトゥルーカラー画像を作成します

$this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT);

$WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);

imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);

imagecopyresize($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this-> ;PICTURE_HEIGHT);

}

//ズーム終了

//座標に従って、または自動的に画像をトリミングします

ファンクションカット()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this->CUT_WIDTH);

imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this->CUT_HEIGHT);

}

//カット終了

/*

写真の上にテキストや写真を入れます

透かしテキスト

*/

関数_mark_text()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

$this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');

/*

TrueType フォントを使用してテキストの範囲を取得します

*/

$TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);

$WORD_LENGTH=strlen($this->WORD);

$WORD_WIDTH =$TEMP[2] - $TEMP[6];

$WORD_HEIGHT =$TEMP[3] - $TEMP[7];

/*

テキスト透かしのデフォルトの位置は右下隅です

*/

if($this->WORD_X=="")

{

$this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;

}

if($this->WORD_Y=="")

{

$this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;

}

imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);

imagefilledrectangle($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);

$TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$this->Blue);

imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$this ->単語);

}

/*

透かし写真

*/

関数_mark_picture()

{

/*

透かし画像に関する情報を取得する

*/

@$SIZE=getimagesize($this->FORCE_URL);

if(!$SIZE)

{

exit($this->ERROR['unalviable']);

}

$FORCE_PICTURE_;

$FORCE_PICTURE_HEIGHT=$SIZE[1];

//透かし画像を作成する

スイッチ($SIZE[2])

{

ケース1:

$FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);

$FORCE_PICTURE_TYPE="gif";

休憩;

ケース2:

$FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL);

$FORCE_PICTURE_TYPE="jpg";

休憩;

ケース 3:

$FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);

$FORCE_PICTURE_TYPE="png";

休憩;

}

/*

ウォーターマーク画像のサイズを決定し、ターゲット画像のサイズを生成します。ウォーターマークが画像より大きい場合、生成される画像のサイズはウォーターマーク画像のサイズになります。それ以外の場合、生成される画像のサイズは元の画像サイズになります。

*/

$this->NEW_PICTURE=$this->PICTURE_CREATE;

if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)

{

$CREATE_;gt;FORCE_START_X;

}

その他

{

$CREATE_;gt;PICTURE_WIDTH;

}

if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)

{

$CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;

}

その他

{

$CREATE_HEIGHT=$this->PICTURE_HEIGHT;

}

/*

キャンバスを作成する

*/

$NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);

$WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);

/*

背景画像をキャンバスにコピーします

*/

imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

/*

対象画像を背景画像にコピー

*/

imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this->FORCE_START_X, $this->FORCE_START_Y,$FORCE_PICTURE_WIDTH,$FORCE_PICTURE_HEIGHT);

$this->TRUE_COLOR=$NEW_PICTURE_CREATE;

}

//マークの終わり

関数 alpha_()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

$rgb="#CDCDCD";

$tran_color="#000000";

for($j=0;$j

{

($i=0;$iPICTURE_WIDTH-1;$i++) の場合

{

$rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);

$r = ($rgb >> 16) & 0xFF;

$g = ($rgb >> 8) & 0xFF;

$b = $rgb & 0xFF;

$now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$b);

if ($now_color==$tran_color)

{

続き;

}

その他

{

$color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);

imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);

}

$this->TRUE_COLOR=$this->PICTURE_CREATE;

}

}

}

/*

画像の回転:

Y軸に沿って回転

*/

関数turn_y()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

for ($x = 0; $x PICTURE_WIDTH; $x++)

{

imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT);

}

}

/*

沿X轴旋转

*/

関数turn_x()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

for ($y = 0; $y PICTURE_HEIGHT; $y++)

{

imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1);

}

}

/*

任意角度旋转

*/

関数turn()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

imageCopyResize($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this-> ;PICTURE_HEIGHT);

$WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);

$this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);

}

/*

写真锐化

*/

関数シャープ()

{

$this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

$cnt=0;

for ($x=0; $xPICTURE_WIDTH; $x++)

{

for ($y=0; $yPICTURE_HEIGHT; $y++)

{

$src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1));

$src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));

$r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));

$g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));

$b = intval($src_clr2["blue"]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));

$r = min(255, max($r, 0));

$g = min(255, max($g, 0));

$b = min(255, max($b, 0));

if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g, $b))==-1)

$DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);

$cnt++;

if ($DST_CLR==-1) die("$x, $y ($cnt) でカラー割り当てに失敗しました。");

imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);

}

}

}

/*

图片反色処理??

*/

関数 return_color()

{

/*

创建一画布

*/

$NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

$WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);

/*

将背景画像を画布中に

*/

imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);

$this->TRUE_COLOR=$NEW_PICTURE_CREATE;

}

/*

目标图片并表示を生成

*/

関数 show()

{

// 判断浏览器,若是IE就不送头

if(isset($_SERVER['HTTP_USER_AGENT']))

{

$ua = strtoupper($_SERVER['HTTP_USER_AGENT']);

if(!preg_match('/^.*MSIE.*)$/i',$ua))

{

header("Content-type:$this->PICTURE_MIME");

}

}

$OUT=$this->PICTURE_TYPE;

$OUT($this->TRUE_COLOR);

}

/*

生成目标图片并保存

*/

関数 save_picture()

{

// JPEG 形式で画像をファイルまたはファイルに出力します

$OUT=$this->PICTURE_TYPE;

if(function_exists($OUT))

{

// ブラウザを決定します。IE の場合、ヘッダーは送信されません

if(isset($_SERVER['HTTP_USER_AGENT']))

{

$ua = strtoupper($_SERVER['HTTP_USER_AGENT']);

if(!preg_match('/^.*MSIE.*)$/i',$ua))

{

header("Content-type:$this->PICTURE_MIME");

}

}

if(!$this->TRUE_COLOR)

{

exit($this->ERROR['unaviable']);

}

その他

{

$OUT($this->TRUE_COLOR,$this->DEST_URL);

$OUT($this->TRUE_COLOR);

}

}

}

/*

デストラクター: 画像を解放します

*/

関数__destruct()

{

/*写真公開*/

imagedestroy($this->TRUE_COLOR);

imagedestroy($this->PICTURE_CREATE);

}

//授業終了

}

?>

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/973120.html技術記事この記事では、PHPで実装されたズーム、カット、フォトフレーム、ウォーターマーク、シャープ、回転、反転などを実現できる一般的な画像処理クラスを中心に紹介します
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。