首頁  >  文章  >  後端開發  >  一個多功能的php圖片處理類

一個多功能的php圖片處理類

WBOY
WBOY原創
2016-07-25 08:43:29819瀏覽
多功能、圖片處理、php

圖片處理函數功能:縮放、剪切、相框、浮水印、銳利化、旋轉、翻轉、透明度、反色,處理並保存歷史記錄的想法:當有圖片有改動時自動產生一張新圖片,命名方式可以考慮在原始圖片的基礎上加上步驟,例如:圖片名稱__第幾步。 在一些需要圖片進階處理功能的網路應用程式中,可以參考這個類別。

  1. /*
  2. 圖片處理函數功能:縮放、剪切、相框、水印、銳利化、旋轉、翻轉、透明度、反色
  3. 處理並保存歷史記錄的想法:當有圖片有改動時自動產生一張新圖片,命名方式可以考慮在原圖片的基礎上加上步驟,例如:圖片名稱__第幾步
  4. */
  5. class picture
  6. {
  7. var $PICTURE_URL;//要處理的圖片
  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 $WORD_Y;//文字縱座標
  20. var $FONT_TYPE;//字體類型
  21. var $FONT_SIZE="12";//字體大小
  22. var $ FONT_WORD;//文字
  23. var $ANGLE=0;//文字的角度,預設為0
  24. var $FONT_COLOR="#000000";//文字顏色
  25. var $FONT_PATH="font/simkai .ttf";//字型庫,預設為宋體
  26. var $FORCE_URL;//浮水印圖片
  27. var $FORCE_X=0;//水印橫座標
  28. var $FORCE_Y=0;//浮水印縱橫座標
  29. var $FORCE_Y=0;//浮水印縱橫座標座標
  30. var $FORCE_START_X=0;//切起浮水印的圖片橫座標
  31. var $FORCE_START_Y=0;//切起浮水印的圖片縱座標
  32. var $PICTURE_TYPE;/圖片類型
  33. var $PICTURE_MIME;//輸出的頭部
  34. /*
  35. 縮放比例為1的話就按縮放高度和寬度縮放
  36. */
  37. var $ZOOM=1 ;//縮放類型
  38. var $ZOOM_MULTIPLE;//縮放比例
  39. var $ZOOM_WIDTH;//縮放寬度
  40. var $ZOOM_HEIGHT;//縮放高度
  41. var $ZOOM_HEIGHT;//縮放高度
  42. /*切,按比例和固定長度、寬度
  43. */
  44. var $CUT_TYPE=1;//裁切類型
  45. var $CUT_X=0;//裁切的橫座標
  46. var $CUT_Y =0;//裁切的縱座標
  47. var $CUT_;//裁切的寬度
  48. var $CUT_HEIGHT=100;//裁切的高度
  49. /*
  50. 銳化
  51. */
  52. var $SHARP="7.0";//銳化程度
  53. /*
  54. 透明度處理
  55. */
  56. var $ALPHA='100' ;//透明度在0-127之間
  57. var $ALPHA_X="90";
  58. var $ALPHA_Y="50";
  59. /*
  60. 任意角度旋轉
  61. * /
  62. var $CIRCUMROTATE="90.0";//注意,必須為浮點數
  63. /*
  64. 出錯訊息
  65. */
  66. var $ERROR=array(
  67. 'unalviable'=>'找不到相關圖片!'
  68. );
  69. /*
  70. 建構子:函式初始化
  71. */
  72. function __construct($PICTURE_URL)
  73. {
  74. $this->get_info($PICTURE_URL);
  75. }
  76. function get_info($PICTURE_URL)
  77. {
  78. /*
  79. 處理原圖片的資訊,先偵測原始圖片的資訊,先偵測原始圖片圖片是否存在,不存在則給予對應的資訊
  80. */
  81. @$SIZE=getimagesize($PICTURE_URL);
  82. if(!$SIZE)
  83. {
  84. exit($this ->ERROR['unalviable']);
  85. }
  86. //得到原圖片的資訊類型、寬度、高度
  87. $this->PICTURE_MIME=$SIZE['mime'];
  88. $this->PICTURE_;
  89. $this->PICTURE_HEIGHT=$SIZE[1];
  90. //建立圖片
  91. switch($SIZE[2])
  92. {
  93. case 1:
  94. $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
  95. $this->PICTURE_TYPE="imagejpeg";
  96. $this->PICTURE_EXT="jpg";
  97. case 2:
  98. $this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL);
  99. $this->PICTURE_TYPE="imagegif";
  100. $this->PICTURE_EXT=">> break;
  101. case 3:
  102. $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
  103. $this->PICTURE_TYPE="imagepng";
  104. $this->PICTURE_EXT="png"; 🎜> break;
  105. }
  106. /*
  107. 文字顏色轉換16進位轉換成10進位
  108. */
  109. preg_match_all("/([0-f]){ 2,2}/i",$this->FONT_COLOR,$MATCHES);
  110. if(count($MATCHES)==3)
  111. {
  112. $this->RED=hexdec($MATCHES[ 0][0]);
  113. $this->GREEN=hexdec($MATCHES[0][1]);
  114. $this->BLUE=hexdec($MATCHES[0][2]);
  115. }
  116. }
  117. #end of __construct
  118. /*
  119. 將16進位的顏色轉換成10進位的(R,G,B)
  120. */
  121. function hex2dec()
  122. {
  123. preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
  124. if (count($MATCHES)==3)
  125. {
  126. $this->RED=hexdec($MATCHES[0][0]);
  127. $this->GREEN=hexdec($MATCHES[0 ][1]);
  128. $this->BLUE=hexdec($MATCHES[0][2]);
  129. }
  130. }
  131. //縮放類型
  132. function zoom_type($ZOOM_TYPE)
  133. {
  134. $this->ZOOM=$ZOOM_TYPE;
  135. }
  136. //對圖片進行縮放,如果不指定高度和寬度就進行縮放
  137. function zoom()
  138. {
  139. //縮放的大小
  140. if($this->ZOOM==0)
  141. {
  142. $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
  143. $this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
  144. }
  145. }彩色圖象
  146. $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT);
  147. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,25555); this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);
  148. imagecopyresized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, $this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  149. }
  150. #end of zoom
  151. //裁切圖片,按座標座標或自動
  152. function cut()
  153. {
  154. $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this->CUT_WIDTH);
  155. imagecopy($this-this>TRthis_COLOR,this ->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this->CUT_HEIGHT);
  156. }
  157. #end of cut
  158. /*
  159. 在圖片上放文字或圖片
  160. 水印文字
  161. */
  162. function _mark_text()
  163. {
  164. $this->TRUE_COLOR=imagecreatecolor($this-this. $this->PICTURE_HEIGHT);
  165. $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
  166. /*
  167. 取得使用TrueType 的文字的字體範圍
  168. */
  169. $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
  170. $WORD_LENGTH=strlen($this->WORD);
  171. $WORD_WIDTH =$TEMP[2] - $TEMP[6];
  172. $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
  173. /*
  174. 文字浮水印的預設位置為右下角
  175. */
  176. if($this->WORD_X=="")
  177. {
  178. $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
  179. }
  180. if($this->WORD_Y=="")
  181. {
  182. $this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
  183. }
  184. imagesettile($this->TRUE_COLOR, $this->PICTURE_CREATE);
  185. imagefilledrectangle($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED); $TE ,$this->RED,$this->GREEN,$this->Blue);
  186. imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$ this->WORD_Y,$TEXT2,$this->FONT_PATH,$this->WORD);
  187. }
  188. /*
  189. 水印圖片
  190. */
  191. function _mark_picture()
  192. {
  193. /*
  194. 取得水印圖片的資訊
  195. */
  196. @$SIZE=getimagesize($this->FORCE_URL);
  197. if(!$SIZE)
  198. {
  199. exit($this->ERROR['unalviable']);
  200. }
  201. $FORCE_PICTURE_;
  202. $FORCE_PICTURE_HEIGHT=$SIZE[1];
  203. $FORCE_PICTURE_HEIGHT=$SIZE[1];
  204. //建立水印圖片
  205. switch($SIZE[2])
  206. {
  207. case 1:
  208. $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
  209. $FORCE_PICTURE_TYPEbreak="> case 2:
  210. $FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL);
  211. $FORCE_PICTURE_TYPE="jpg";
  212. break>
  213. Cate; this->FORCE_URL);
  214. $FORCE_PICTURE_TYPE="png";
  215. break;
  216. }
  217. /*
  218. 判斷水印圖片的大小,並產生目標圖片的大小,如果水印比圖片大,則產生圖片大小為浮水印圖片的大小。否則產生的圖片大小為原始圖片大小。
  219. */
  220. $this->NEW_PICTURE=$this->PICTURE_CREATE;
  221. if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
  222. { $ $S; $S; > }
  223. else
  224. {
  225. $CREATE_;gt;PICTURE_WIDTH;
  226. }
  227. if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEATE)FORCE_START_Y;
  228. }
  229. else
  230. {
  231. $CREATE_HEIGHT=$this->PICTURE_HEIGHT;
  232. }
  233. /
  234. 🎜> */
  235. $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
  236. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255); > */
  237. imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  238. /* */
  239. imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this-> ;FORCE_START_X, $this-A_X, $ $FORCE_PICTURE_HEIGHT);
  240. $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
  241. }
  242. #結束標記
  243. 函數 $thispha_( )PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  244. $rgb="#CDCCDCD";
  245. $tran_color=" #000000";
  246. for($j=0;$jPICTURE_HEIGHT-1;$j )
  247. {
  248. for ($i=0;$iPICTURE_WIDTH-1;$i )
  249. {
  250. $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
  251. $r = ($rgb >>> 16) & 0xFF;
  252. $g = ($rgb >> 8) & 0xFF;
  253. $b = $rgb & 0xFF;
  254. $now_color=imagecolorallocate($this->PICTURE_CREATE,$ r,$g,$b);
  255. if ($now_color==$tran_color)
  256. {
  257. 繼續;
  258. }
  259. else
  260. {
  261. $color=imagecolorallocatealpha( $this->PICTURE__,$r,$g,$b,$ALPHA);
  262. imagethispixel($ imagethis ->PICTURE_CREATE,$ALPHA_X $i,$ALPHA_Y $j,$color);
  263. }
  264. $this->TRUE_COLOR=$this->PICTURE_CREATE;
  265. }
  266. }
  267. }
  268. /*
  269. 圖片旋轉:
  270. 沿著y軸旋轉
  271. */
  272. 函數turn_y()
  273. {
  274. $this->TRUE_COLOR=imagecreatetruecolor($this - >PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  275. for ($x = 0; $x $x )
  276. {
  277. imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1 , $this->PICTURE_HEIGHT);
  278. }
  279. }
  280. /*
  281. 沿X軸旋轉
  282. */
  283. functionturn_x( )
  284. {
  285. $ $-this> TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  286. for ($y = 0; $y PICTURE_HEIGHT; $y )
  287. {
  288. thisimagecopy($ ->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this-> PICTURE_WIDTH, 1);
  289. }
  290. }
  291. /*
  292. 任意角度旋轉
  293. */
  294. functionturn()
  295. {
  296. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  297. imageCopyResized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  298. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
  299. $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
  300. }
  301. }
  302. /*
  303. 圖片銳利化
  304. */
  305. function Sharp()
  306. {
  307. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this-> ;PICTURE_HEIGHTtruecolor($this->PICTURE_WIDTH,$this-> ;PICTURE_HEIGHT );
  308. $cnt=0;
  309. for ($x=0; $xPICTURE_WIDTH; $x )
  310. {
  311. for ($y=0; $ yPICTURE_HEIGHT; $y )
  312. {
  313. $src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1) );
  314. $ src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
  315. $r = intval($src_clr2["red"] $this->SHARP*($src_cl2 ["red"]-$src_clr1["red"]));
  316. $g = intval($src_clr2["green"] $this->SHARP*($src_clr2 ["綠色"]-$src_clr1["綠色"]));
  317. $b = intval($src_clr2["藍色"] $this->SHARP*($src_clr2["藍色"]-$src_clr1["藍色"]));
  318. $r = min(255, max($r, 0));
  319. $g = min(255, max($g, 0));
  320. $b = min(255, max($ b, 0));
  321. if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g, $b))==-1)
  322. $DST_CLR = imagecolorallocate($this-> PICTURE_CREATE, $r, $g, $b);
  323. $cnt ;
  324. if ($DST_CLR==-1) die("顏色分配失敗於$x, $y ($cnt).");
  325. imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
  326. }
  327. }
  328. }
  329. /*
  330. 圖片反色處理?
  331. */
  332. function return_color()
  333. {
  334. /*
  335. 建立圖片
  336. */
  337. $NEW_PICTURE_CREATE= imagecreate($this->PICTURE_WIDTH,,$ PICTURE_HEIGHT);
  338. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  339. /*
  340. 將背景圖複製到修復中PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  341. $this->TRUE_COLOR=$ NEW_PICTURE_CREATE;
  342. }
  343. / >🎜>目標圖片並顯示
  344. */
  345. function show()
  346. {
  347. // 判斷瀏覽器,如果IE不傳送頭
  348. if(isset($_SERVER['HTTP_USER_AGENT') ]) )
  349. {
  350. $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
  351. if(!preg_match('/ ^.*MSIE.*)$/i',$ua))
  352. {
  353. header("內容類型:$this->PICTURE_MIME");
  354. }
  355. }
  356. $OUT=$this->PICTURE_TYPE;
  357. $OUT($this ->TRUE_COLOR );
  358. }
  359. /*
  360. 產生目標圖片並儲存
  361. */
  362. function save_picture()
  363. {
  364. //以JPEG格式將圖片輸出到瀏覽器或檔案
  365. $OUT=$this->PICTURE_TYPE;
  366. if(function_exists($OUT))
  367. {
  368. // 判斷瀏覽器,如果IE不傳送頭
  369. if( isset($_SERVER['HTTP_USER_AGENT']))
  370. {
  371. $ua = strtoupper($_SERVER[ 'HTTP_USER_AGENT']);
  372. if(!preg_match('/^.*MSIE. *)$ /i',$ua))
  373. {
  374. header("內容類型:$this-> ;PICTURE_MIME");
  375. }
  376. }
  377. if(!$this- >TRUE_COLOR)
  378. {
  379. exit($this->ERROR['不可用']);
  380. }
  381. else
  382. {
  383. $OUT($this->TRUE_COLOR,$this -> DEST_URL);
  384. $OUT($this->TRUE_COLOR);
  385. }
  386. }
  387. }
  388. /*
  389. 解析建構子:釋放圖片
  390. */
  391. function __destruct()
  392. {
  393. /*釋放圖片*/
  394. imagedestroy ($this->TRUE_COLOR);
  395. imagedestroy($this->PICTURE_CREATE);
  396. imagedestroy($this->PICTURE_CREATE);
  397. }
  398. #🎜>課程課程課程結束
  399. }
  400. ?>
複製程式碼

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn