麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

功能強大的PHP圖片處理類(水印、透明度、旋轉)

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

這篇文章主要匯總介紹了php圖片處理類(水印、透明度、縮放、銳化),非常的簡單實用,有需要的小伙伴可以參考下

非常強大的php圖片處理類,可以自定義圖片水印、透明度、圖片縮放、圖片銳化、圖片旋轉、圖片翻轉、圖片剪切、圖片反色。

* 圖片處理函數功能:縮放、剪切、相框、水印、銳化、旋轉、翻轉、透明度、反色

* 處理并保存歷史記錄的思路:當有圖片有改動時自動生成一張新圖片,命名方式可以考慮在原圖片的基礎上加上步驟,例如:圖片名稱+__第幾步

具體代碼如下:

 

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

這就是非常強大的php圖片處理類,好好收藏,親,相信以后一定會派上用場的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜影院a | 久久综合九色综合久久久精品综合 | 国产盼盼私拍福利视频99 | 新久草在线视频 | 国产91亚洲精品久久久 | 男女生羞羞视频网站在线观看 | 久久精品一区二区三区不卡牛牛 | videos真实高潮xxxx| 色999久久久精品人人澡69 | 久久99精品久久久久久小说 | 久国产精品视频 | 91社影院在线观看 | 亚洲午夜天堂吃瓜在线 | 爱看久久| 精品国产观看 | 亚洲精品成人18久久久久 | 亚洲一区二区中文字幕在线观看 | 97久久精品一区二区三区观看 | 免费国产a | 色婷婷一区二区三区 | 91 视频网站| 精品久久久久久久久久 | 国产亚洲区 | 久在线播放 | 国产日本在线播放 | 91性高湖久久久久久久久网站 | jizzjizz中国人少妇中文 | 看免费一级毛片 | 国产人成免费爽爽爽视频 | 日韩中字在线 | 久久久久久久一区二区 | 九九热精品视频在线 | 精品成人在线 | 久久精品在线免费观看 | 欧美精品成人一区二区在线观看 | 亚洲欧美日韩中文在线 | 91av久久| 孕妇体内谢精满日本电影 | 亚洲一区二区三区日本久久九 | 免费a观看 | 羞羞网站在线看 |