ホームページ  >  記事  >  バックエンド開発  >  多機能なphp画像処理クラス

多機能なphp画像処理クラス

WBOY
WBOYオリジナル
2016-07-25 08:43:29832ブラウズ

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

  1. /*
  2. 画像処理機能機能:ズーム、カット、フォトフレーム、透かし、シャープ、回転、反転、透明度、色反転
  3. 処理と履歴保存の考え方:ある場合a picture 変更を加えると、新しいピクチャーが自動的に生成されます。名前付け方法では、元のピクチャーに基づいてステップを追加することを検討できます。例: ピクチャー名 + __ ステップ
  4. */
  5. class picture
  6. {
  7. var $PICTURE_URL;//To be処理された画像
  8. var $DEST_URL="temp__01.jpg";//ターゲット画像の場所を生成します
  9. var $PICTURE_CREATE;//作成される画像
  10. var $TURE_COLOR;// 新しいトゥルーカラー画像を作成します
  11. var $PICTURE_WIDTH ;// 元の画像の幅
  12. var $PICTURE_HEIGHT;// 元の画像の高さ
  13. /*
  14. 透かしのタイプ、デフォルトは透かしテキストです
  15. */
  16. var $MARK_TYPE=1;
  17. var $WORD;// UTF-以降8 テキスト
  18. var $WORD_X; // テキストの横軸
  19. var $FONT_TYPE; // フォントの種類
  20. var $FONT_WORD;
  21. var $ANGLE=0;//テキストの角度、デフォルトは0です
  22. var $FONT_COLOR="#000000";//テキストの色
  23. var $FONT_PATH="font/simkai.ttf";//フォントライブラリ、デフォルト宋代です
  24. var $FORCE_URL;//ウォーターマーク画像
  25. var $FORCE_X=0;//ウォーターマークの横座標
  26. var $FORCE_Y=0;//ウォーターマークの垂直座標
  27. var $FORCE_START_X=0;//透かし入り画像の水平軸 座標
  28. var $FORCE_START_Y=0;//透かしが切り取られる画像の垂直座標
  29. var $PICTURE_TYPE;//画像タイプ
  30. var $PICTURE_MIME;// 出力ヘッダー
  31. / *
  32. スケーリング率が 1 の場合、ズームの高さと幅を押します。 ZOOM_HEIGHT;//ズームの高さ
  33. /*
  34. クロップ、比例的かつ固定長さと幅
  35. */
  36. var $CUT_TYPE=1;//カットタイプ
  37. var $CUT_X=0;//クロップの横座標
  38. var $CUT_Y= 0;//トリミング カットの座標
  39. var $CUT_;//カットの幅
  40. var $CUT_HEIGHT=100;//カットの高さ
  41. /*
  42. シャープ化
  43. */
  44. var $SHARP= "7.0";//シャープな変形度
  45. /*
  46. 透明処理
  47. */
  48. var $ALPHA='100';//透明度は0〜127です
  49. var $ALPHA_X="90";
  50. var $ALPHA_Y ="50";
  51. /*
  52. 任意の角度で回転
  53. */
  54. var $CIRCUMROTATE="90.0";//浮動小数点数である必要があることに注意してください
  55. /*
  56. エラーメッセージ
  57. */
  58. var $ ERROR=array(
  59. 'unalviable'=> '関連する画像が見つかりません!'
  60. );
  61. /*
  62. コンストラクター: 関数の初期化
  63. */
  64. function __construct($PICTURE_URL)
  65. {
  66. $this->get_info( $PICTURE_URL);
  67. }
  68. function get_info ($PICTURE_URL)
  69. {
  70. /*
  71. 元の画像の情報を処理し、まず画像が存在するかどうかを確認し、存在しない場合は対応する情報を提供します
  72. */
  73. @$ SIZE=getimagesize($PICTURE_URL);
  74. if(!$SIZE )
  75. {
  76. exit($this->ERROR['unalviable']);
  77. }
  78. //画像の情報の種類、幅、高さを取得します。元の画像
  79. $this->PICTURE_MIME=$SIZE['mime'] ;
  80. $this->PICTURE_;
  81. $this->PICTURE_HEIGHT=$SIZE[1];
  82. //画像を作成
  83. switch($ SIZE[2])
  84. {
  85. ケース 1:
  86. $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
  87. $this->PICTURE_TYPE="imagejpeg";
  88. $this->PICTURE_EXT="jpg";
  89. ブレーク;
  90. ケース 2:
  91. $this->PICTURE_CREATE=imagecreatefromjpeg($ PICTURE_URL);
  92. $this->PICTURE_TYPE="imagegif";
  93. $this->PICTURE_EXT="gif";
  94. ブレーク;
  95. ケース 3 :
  96. $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
  97. $this->PICTURE_TYPE="imagepng";
  98. $this->PICTURE_EXT="png";
  99. ブレーク;
  100. }
  101. /*
  102. 変換テキストの色を 16 進数から 10 進数に変換します
  103. */
  104. preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
  105. if(count($MATCHES)= =3)
  106. {
  107. $this->RED= hexdec($MATCHES[0][0]);
  108. $this->GREEN=hexdec($MATCHES[0][1]);
  109. $this-> ;BLUE=hexdec($MATCHES[0][2] );
  110. }
  111. }
  112. #end of __construct
  113. /*
  114. 16 進数の色を 10 進数 (R, G, B) に変換します
  115. */
  116. function hex2dec()
  117. {
  118. preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
  119. if(count($MATCHES)==3)
  120. {
  121. $ this->RED= hexdec($MATCHES[0][0]);
  122. $this->GREEN=hexdec($MATCHES[0][1]);
  123. $this->BLUE=hexdec($MATCHES [0][2] );
  124. }
  125. }
  126. //ズームタイプ
  127. functionzoom_type($ZOOM_TYPE)
  128. {
  129. $this->ZOOM=$ZOOM_TYPE;
  130. }
  131. //画像をズームします。高さと幅が指定されていない場合は、ズームされます
  132. functionzoom( )
  133. {
  134. //ズームサイズ
  135. if($this->ZOOM==0)
  136. {
  137. $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
  138. $this-> ;ZOOM_HEIGHT =$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
  139. }
  140. //新しいトゥルーカラー画像を作成します
  141. $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this-> ZOOM_HEIGHT) ;
  142. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
  143. imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE) ;
  144. imagecopyresize($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this- > PICTURE_HEIGHT);
  145. }
  146. #ズーム終了
  147. // 座標に従って、または自動的に画像を切り抜きます
  148. function Cut()
  149. {
  150. $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$ this->CUT_WIDTH);
  151. imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$ this-> ;CUT_HEIGHT);
  152. }
  153. #カット終了
  154. /*
  155. 画像にテキストまたは画像を配置します
  156. 透かしテキスト
  157. */
  158. function _mark_text()
  159. {
  160. $this->TRUE_COLOR=imagecreatetruecolor($ this-> ;PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  161. $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
  162. /*
  163. 次を使用してテキストを取得しますTrueType フォント範囲
  164. */
  165. $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
  166. $WORD_LENGTH=strlen($this->WORD);
  167. $ WORD_WIDTH =$TEMP[2] - $TEMP[6];
  168. $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
  169. /*
  170. テキスト透かしのデフォルトの位置は右下隅です
  171. * /
  172. if($this ->WORD_X=="")
  173. {
  174. $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
  175. }
  176. if($this->WORD_Y=="" )
  177. {
  178. $this ->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
  179. }
  180. imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);
  181. imagefilledrectangle($this->TRUE_COLOR) ,0,0,$ this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
  182. $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$ this->Blue) ;
  183. imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this ->FONT_PATH,$ this->WORD);
  184. }
  185. /*
  186. ウォーターマーク画像
  187. */
  188. function _mark_picture()
  189. {
  190. /*
  191. ウォーターマーク画像情報を取得
  192. */
  193. @$SIZE=getimagesize( $this-> FORCE_URL);
  194. if(!$SIZE)
  195. {
  196. exit($this->ERROR['unalviable']);
  197. }
  198. $FORCE_PICTURE_;
  199. $FORCE_PICTURE_HEIGHT=$SIZE[1];
  200. //ウォーターマーク画像を作成します
  201. switch($SIZE[2])
  202. {
  203. case 1:
  204. $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
  205. $FORCE_PICTURE_TYPE="gif";
  206. Break;
  207. case 2:
  208. $FORCE_PICTURE_CREATE=imagecreatefromjpeg( $this->FORCE_URL);
  209. $FORCE_PICTURE_TYPE="jpg";
  210. ブレーク;
  211. ケース 3:
  212. $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
  213. $FORCE_PICTURE_TYPE="png";
  214. Break;
  215. }
  216. /*
  217. ウォーターマーク画像のサイズを決定し、ターゲット画像のサイズを生成します。ウォーターマークが画像より大きい場合、生成される画像のサイズはウォーターマーク画像のサイズになります。それ以外の場合、生成される画像のサイズは元の画像サイズになります。
  218. */
  219. $this->NEW_PICTURE=$this->PICTURE_CREATE;
  220. if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
  221. {
  222. $CREATE_;gt;FORCE_START_X;
  223. }
  224. else
  225. {
  226. $CREATE _ ;gt;PICTURE_WIDTH;
  227. }
  228. if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)
  229. {
  230. $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
  231. }
  232. else
  233. {
  234. $CREATE_HEIGHT=$this- >PICTURE_HEIGHT;
  235. }
  236. /*
  237. 创建一画布
  238. */
  239. $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
  240. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  241. /*
  242. 将背景画像サンプル贝到画布中
  243. */
  244. imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  245. /*
  246. 将目标图片コピー贝背景画像上
  247. */
  248. 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_HEそう) ;
  249. $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
  250. }
  251. #マークの終わり
  252. function alpha_()
  253. {
  254. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT );
  255. $rgb="#CDCDCD";
  256. $tran_color="#000000";
  257. for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++)
  258. {
  259. for ($ i=0;$i<=$this->PICTURE_WIDTH-1;$i++)
  260. {
  261. $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
  262. $r = ($rgb > ;> 16) & 0xFF;
  263. $g = ($rgb >> 8) & 0xFF;
  264. $b = $rgb & 0xFF;
  265. $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$ b);
  266. if ($now_color==$tran_color)
  267. {
  268. continue;
  269. }
  270. else
  271. {
  272. $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
  273. imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);
  274. }
  275. $this->TRUE_COLOR=$this->PICTURE_CREATE;
  276. }
  277. }
  278. }
  279. / *
  280. 图片旋转:
  281. 沿線轴旋转
  282. */
  283. functionturn_y()
  284. {
  285. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  286. for ($x = 0; $x < $this->PICTURE_WIDTH; $x++)
  287. {
  288. imagecopy($this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 0, $x, 0, 1, $this->PICTURE_HEIGHT);
  289. }
  290. }
  291. /*
  292. 沿X轴旋转
  293. */
  294. functionturn_x()
  295. {
  296. $this->TRUE_COLOR=imagecreatetruecolor($this- >PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  297. for ($y = 0; $y PICTURE_HEIGHT; $y++)
  298. {
  299. imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1) ;
  300. }
  301. }
  302. /*
  303. 任意角度旋转
  304. */
  305. functionturn()
  306. {
  307. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  308. imageCopyResize ($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT );
  309. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
  310. $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
  311. }
  312. /*
  313. 图片锐化
  314. */
  315. function Sharp()
  316. {
  317. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  318. $cnt=0;
  319. for ($x=0; $xPICTURE_WIDTH; $x++)
  320. {
  321. for ($y=0; $yPICTURE_HEIGHT; $y++)
  322. {
  323. $src_clr1 = imagecolorsforindex( $this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1));
  324. $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
  325. $r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
  326. $ g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));
  327. $b = intval($src_clr2["blue" ]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));
  328. $r = min(255, max($r, 0));
  329. $g = 分(255, max($g, 0));
  330. $b = min(255, max($b, 0));
  331. if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g) , $b))==-1)
  332. $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);
  333. $cnt++;
  334. if ($DST_CLR==-1) die(" $x, $y ($cnt) でカラー割り当てに失敗しました。");
  335. imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
  336. }
  337. }
  338. }
  339. /*
  340. 将图片反色处理??
  341. */
  342. function return_color()
  343. {
  344. /*
  345. 创建一画布
  346. */
  347. $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  348. $WHITE= imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  349. /*
  350. 画布中に背景画像をコピーします
  351. */
  352. imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH, $this->PICTURE_HEIGHT);
  353. $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
  354. }
  355. /*
  356. 生成目标图片并显表示
  357. */
  358. function show()
  359. {
  360. // 判断浏览器,若是IE就不送头
  361. if(isset($_SERVER['HTTP_USER_AGENT']))
  362. {
  363. $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
  364. if(!preg_match('/^.*MSIE.*) $/i',$ua))
  365. {
  366. header("Content-type:$this->PICTURE_MIME");
  367. }
  368. }
  369. $OUT=$this->PICTURE_TYPE;
  370. $OUT($this- >TRUE_COLOR);
  371. }
  372. /*
  373. 生成目标画像并保存
  374. */
  375. function save_picture()
  376. {
  377. // JPEG 格式による将画像を浏視台または文書に出力
  378. $OUT=$this-> PICTURE_TYPE;
  379. if(function_exists($OUT))
  380. {
  381. // 判断浏览器,若是IE不送头
  382. if(isset($_SERVER['HTTP_USER_AGENT']))
  383. {
  384. $ua = strtoupper($_SERVER ['HTTP_USER_AGENT']);
  385. if(!preg_match('/^.*MSIE.*)$/i',$ua))
  386. {
  387. header("Content-type:$this->PICTURE_MIME");
  388. }
  389. }
  390. if(!$this->TRUE_COLOR)
  391. {
  392. exit($this->ERROR['unaviable']);
  393. }
  394. else
  395. {
  396. $OUT($this->TRUE_COLOR, $this->DEST_URL);
  397. $OUT($this->TRUE_COLOR);
  398. }
  399. }
  400. }
  401. /*
  402. 分析関数:释放图片
  403. */
  404. function __destruct()
  405. {
  406. /*释放画像*/
  407. imagedestroy($this->TRUE_COLOR);
  408. imagedestroy($this->PICTURE_CREATE);
  409. }
  410. #授業終了
  411. }
  412. ?>
复制發

多機能、图片处処理、php


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。