国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php實現的通用圖片處理類

2024-05-04 23:33:19
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php實現的通用圖片處理類,可實現針對圖片的縮放、剪切、相框、水印、銳化、旋轉、翻轉、透明度、反色等功能,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php實現的通用圖片處理類。分享給大家供大家參考。具體如下:

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

 

 
  1. <?php 
  2. class picture 
  3. var $PICTURE_URL;//要處理的圖片 
  4. var $DEST_URL="temp__01.jpg";//生成目標圖片位置 
  5. var $PICTURE_CREATE;//要創建的圖片 
  6. var $TURE_COLOR;//新建一個真彩圖象 
  7. var $PICTURE_WIDTH;//原圖片寬度 
  8. var $PICTURE_HEIGHT;//原圖片高度 
  9. /* 
  10. 水印的類型,默認的為水印文字 
  11. */ 
  12. var $MARK_TYPE=1; 
  13. var $WORD;//經過UTF-8后的文字 
  14. var $WORD_X;//文字橫坐標 
  15. var $WORD_Y;//文字縱坐標 
  16. var $FONT_TYPE;//字體類型 
  17. var $FONT_SIZE="12";//字體大小 
  18. var $FONT_WORD;//文字 
  19. var $ANGLE=0;//文字的角度,默認為0 
  20. var $FONT_COLOR="#000000";//文字顏色 
  21. var $FONT_PATH="font/simkai.ttf";//字體庫,默認為宋體 
  22. var $FORCE_URL;//水印圖片 
  23. var $FORCE_X=0;//水印橫坐標 
  24. var $FORCE_Y=0;//水印縱坐標 
  25. var $FORCE_START_X=0;//切起水印的圖片橫坐標 
  26. var $FORCE_START_Y=0;//切起水印的圖片縱坐標 
  27. var $PICTURE_TYPE;//圖片類型 
  28. var $PICTURE_MIME;//輸出的頭部 
  29. /* 
  30. 縮放比例為1的話就按縮放高度和寬度縮放 
  31. */ 
  32. var $ZOOM=1;//縮放類型 
  33. var $ZOOM_MULTIPLE;//縮放比例 
  34. var $ZOOM_WIDTH;//縮放寬度 
  35. var $ZOOM_HEIGHT;//縮放高度 
  36. /* 
  37. 裁切,按比例和固定長度、寬度 
  38. */ 
  39. var $CUT_TYPE=1;//裁切類型 
  40. var $CUT_X=0;//裁切的橫坐標 
  41. var $CUT_Y=0;//裁切的縱坐標 
  42. var $CUT_;//裁切的寬度 
  43. var $CUT_HEIGHT=100;//裁切的高度 
  44. /* 
  45. 銳化 
  46. */ 
  47. var $SHARP="7.0";//銳化程度 
  48. /* 
  49. 透明度處理 
  50. */ 
  51. var $ALPHA='100';//透明度在0-127之間 
  52. var $ALPHA_X="90"
  53. var $ALPHA_Y="50"
  54. /* 
  55. 任意角度旋轉 
  56. */ 
  57. var $CIRCUMROTATE="90.0";//注意,必須為浮點數 
  58. /* 
  59. 出錯信息 
  60. */ 
  61. var $ERROR=array
  62. 'unalviable'=>'沒有找到相關圖片!' 
  63. ); 
  64. /* 
  65. 構造函數:函數初始化 
  66. */ 
  67. function __construct($PICTURE_URL
  68. $this->get_info($PICTURE_URL); 
  69. function get_info($PICTURE_URL
  70. /* 
  71. 處理原圖片的信息,先檢測圖片是否存在,不存在則給出相應的信息 
  72. */ 
  73. @$SIZE=getimagesize($PICTURE_URL); 
  74. if(!$SIZE
  75. exit($this->ERROR['unalviable']); 
  76. //得到原圖片的信息類型、寬度、高度 
  77. $this->PICTURE_MIME=$SIZE['mime']; 
  78. $this->PICTURE_; 
  79. $this->PICTURE_HEIGHT=$SIZE[1]; 
  80. //創建圖片 
  81. switch($SIZE[2]) 
  82. case 1: 
  83. $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL); 
  84. $this->PICTURE_TYPE="imagejpeg"
  85. $this->PICTURE_EXT="jpg"
  86. break
  87. case 2: 
  88. $this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL); 
  89. $this->PICTURE_TYPE="imagegif"
  90. $this->PICTURE_EXT="gif"
  91. break
  92. case 3: 
  93. $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL); 
  94. $this->PICTURE_TYPE="imagepng"
  95. $this->PICTURE_EXT="png"
  96. break
  97. }  
  98. /* 
  99. 文字顏色轉換16進制轉換成10進制 
  100. */ 
  101. preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES); 
  102. if(count($MATCHES)==3) 
  103. $this->RED=hexdec($MATCHES[0][0]); 
  104. $this->GREEN=hexdec($MATCHES[0][1]); 
  105. $this->BLUE=hexdec($MATCHES[0][2]); 
  106. //end of __construct 
  107. /* 
  108. 將16進制的顏色轉換成10進制的(R,G,B) 
  109. */ 
  110. function hex2dec() 
  111. preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES); 
  112. if(count($MATCHES)==3) 
  113. $this->RED=hexdec($MATCHES[0][0]); 
  114. $this->GREEN=hexdec($MATCHES[0][1]); 
  115. $this->BLUE=hexdec($MATCHES[0][2]); 
  116. //縮放類型 
  117. function zoom_type($ZOOM_TYPE
  118. $this->ZOOM=$ZOOM_TYPE
  119. //對圖片進行縮放,如果不指定高度和寬度就進行縮放 
  120. function zoom() 
  121. //縮放的大小 
  122. if($this->ZOOM==0) 
  123. $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE; 
  124. $this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE; 
  125. //新建一個真彩圖象 
  126. $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT); 
  127. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255); 
  128. imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE); 
  129. imagecopyresized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  130. //end of zoom 
  131. //裁切圖片,按坐標或自動 
  132. function cut() 
  133. $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this->CUT_WIDTH); 
  134. imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this->CUT_HEIGHT); 
  135. //end of cut 
  136. /* 
  137. 在圖片上放文字或圖片 
  138. 水印文字 
  139. */ 
  140. function _mark_text() 
  141. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  142. $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312'); 
  143. /* 
  144. 取得使用 TrueType 字體的文本的范圍 
  145. */ 
  146. $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD); 
  147. $WORD_LENGTH=strlen($this->WORD); 
  148. $WORD_WIDTH =$TEMP[2] - $TEMP[6]; 
  149. $WORD_HEIGHT =$TEMP[3] - $TEMP[7]; 
  150. /* 
  151. 文字水印的默認位置為右下角 
  152. */ 
  153. if($this->WORD_X==""
  154. $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH
  155. if($this->WORD_Y==""
  156. $this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT
  157. imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE); 
  158. imagefilledrectangle($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED); 
  159. $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$this->Blue); 
  160. imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$this->WORD); 
  161. /* 
  162. 水印圖片 
  163. */ 
  164. function _mark_picture() 
  165. /* 
  166. 獲取水印圖片的信息 
  167. */ 
  168. @$SIZE=getimagesize($this->FORCE_URL); 
  169. if(!$SIZE
  170. exit($this->ERROR['unalviable']); 
  171. $FORCE_PICTURE_
  172. $FORCE_PICTURE_HEIGHT=$SIZE[1]; 
  173. //創建水印圖片 
  174. switch($SIZE[2]) 
  175. case 1: 
  176. $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL); 
  177. $FORCE_PICTURE_TYPE="gif"
  178. break
  179. case 2: 
  180. $FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL); 
  181. $FORCE_PICTURE_TYPE="jpg"
  182. break
  183. case 3: 
  184. $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL); 
  185. $FORCE_PICTURE_TYPE="png"
  186. break
  187. /* 
  188. 判斷水印圖片的大小,并生成目標圖片的大小,如果水印比圖片大,則生成圖片大小為水印圖片的大小。否則生成的圖片大小為原圖片大小。 
  189. */ 
  190. $this->NEW_PICTURE=$this->PICTURE_CREATE; 
  191. if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH) 
  192. $CREATE_;gt;FORCE_START_X; 
  193. else 
  194. $CREATE_;gt;PICTURE_WIDTH; 
  195. if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT) 
  196. $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y; 
  197. else 
  198. $CREATE_HEIGHT=$this->PICTURE_HEIGHT; 
  199. /* 
  200. 創建一個畫布 
  201. */ 
  202. $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT); 
  203. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255); 
  204. /* 
  205. 將背景圖拷貝到畫布中 
  206. */ 
  207. imagecopy($NEW_PICTURE_CREATE$this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  208. /* 
  209. 將目標圖片拷貝到背景圖片上 
  210. */ 
  211. 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); 
  212. $this->TRUE_COLOR=$NEW_PICTURE_CREATE
  213. //end of mark 
  214. function alpha_() 
  215. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  216. $rgb="#CDCDCD"
  217. $tran_color="#000000"
  218. for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++) 
  219. for ($i=0;$i<=$this->PICTURE_WIDTH-1;$i++) 
  220. $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j); 
  221. $r = ($rgb >> 16) & 0xFF; 
  222. $g = ($rgb >> 8) & 0xFF; 
  223. $b = $rgb & 0xFF; 
  224. $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$b); 
  225. if ($now_color==$tran_color
  226. continue
  227. else 
  228. $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA); 
  229. imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color); 
  230. $this->TRUE_COLOR=$this->PICTURE_CREATE; 
  231. /* 
  232. 圖片旋轉: 
  233. 沿y軸旋轉 
  234. */ 
  235. function turn_y() 
  236. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  237. for ($x = 0; $x < $this->PICTURE_WIDTH; $x++) 
  238. imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT); 
  239. /* 
  240. 沿X軸旋轉 
  241. */ 
  242. function turn_x() 
  243. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  244. for ($y = 0; $y < $this->PICTURE_HEIGHT; $y++) 
  245. imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y$this->PICTURE_WIDTH, 1); 
  246. /* 
  247. 任意角度旋轉 
  248. */ 
  249. function turn() 
  250. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  251. imageCopyResized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  252. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255); 
  253. $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE); 
  254. /* 
  255. 圖片銳化 
  256. */ 
  257. function sharp() 
  258. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  259. $cnt=0; 
  260. for ($x=0; $x<$this->PICTURE_WIDTH; $x++) 
  261. for ($y=0; $y<$this->PICTURE_HEIGHT; $y++) 
  262. $src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1)); 
  263. $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x$y)); 
  264. $r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"])); 
  265. $g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"])); 
  266. $b = intval($src_clr2["blue"]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"])); 
  267. $r = min(255, max($r, 0)); 
  268. $g = min(255, max($g, 0)); 
  269. $b = min(255, max($b, 0)); 
  270. if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r$g$b))==-1) 
  271. $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r$g$b); 
  272. $cnt++; 
  273. if ($DST_CLR==-1) die("color allocate faile at $x, $y ($cnt)."); 
  274. imagesetpixel($this->TRUE_COLOR, $x$y$DST_CLR); 
  275. /* 
  276. 將圖片反色處理?? 
  277. */ 
  278. function return_color() 
  279. /* 
  280. 創建一個畫布 
  281. */ 
  282. $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  283. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255); 
  284. /* 
  285. 將背景圖拷貝到畫布中 
  286. */ 
  287. imagecopy($NEW_PICTURE_CREATE$this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT); 
  288. $this->TRUE_COLOR=$NEW_PICTURE_CREATE
  289. /* 
  290. 生成目標圖片并顯示 
  291. */ 
  292. function show() 
  293. // 判斷瀏覽器,若是IE就不發送頭 
  294. if(isset($_SERVER['HTTP_USER_AGENT'])) 
  295. $ua = strtoupper($_SERVER['HTTP_USER_AGENT']); 
  296. if(!preg_match('/^.*MSIE.*/)$/i',$ua)) 
  297. header("Content-type:$this->PICTURE_MIME"); 
  298. $OUT=$this->PICTURE_TYPE; 
  299. $OUT($this->TRUE_COLOR); 
  300. /* 
  301. 生成目標圖片并保存 
  302. */ 
  303. function save_picture() 
  304. // 以 JPEG 格式將圖像輸出到瀏覽器或文件 
  305. $OUT=$this->PICTURE_TYPE; 
  306. if(function_exists($OUT)) 
  307. // 判斷瀏覽器,若是IE就不發送頭 
  308. if(isset($_SERVER['HTTP_USER_AGENT'])) 
  309. $ua = strtoupper($_SERVER['HTTP_USER_AGENT']); 
  310. if(!preg_match('/^.*MSIE.*/)$/i',$ua)) 
  311. header("Content-type:$this->PICTURE_MIME"); 
  312. if(!$this->TRUE_COLOR) 
  313. exit($this->ERROR['unavilable']); 
  314. else 
  315. $OUT($this->TRUE_COLOR,$this->DEST_URL); 
  316. $OUT($this->TRUE_COLOR); 
  317. /* 
  318. 析構函數:釋放圖片 
  319. */ 
  320. function __destruct() 
  321. /*釋放圖片*/ 
  322. imagedestroy($this->TRUE_COLOR); 
  323. imagedestroy($this->PICTURE_CREATE); 
  324. //end of class 
  325. ?> 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐梓县| 土默特左旗| 台中市| 宁化县| 翁牛特旗| 周宁县| 德令哈市| 沈阳市| 剑河县| 山阴县| 浪卡子县| 龙游县| 黄浦区| 韶关市| 阜城县| 镇宁| 轮台县| 邵阳市| 阳曲县| 潜江市| 上犹县| 淄博市| 汉寿县| 南汇区| 峨山| 鸡西市| 安化县| 句容市| 棋牌| 秦皇岛市| 漠河县| 山东| 西昌市| 海盐县| 汕尾市| 牙克石市| 金门县| 綦江县| 周至县| 盐津县| 吴旗县|