>  기사  >  백엔드 개발  >  다기능 PHP 이미지 처리 클래스

다기능 PHP 이미지 처리 클래스

WBOY
WBOY원래의
2016-07-25 08:43:29818검색

이미지 처리 기능 기능: 확대/축소, 잘라내기, 사진 프레임, 워터마크, 선명하게 하기, 회전, 뒤집기, 투명도, 색상 반전, 처리 및 기록 저장 아이디어: 사진이 변경되면 자동으로 새 이미지 생성, 명명 방법 고려 가능 원본 그림을 기반으로 단계를 추가합니다(예: 그림 이름 __ 어떤 단계). 고급 이미지 처리 기능이 필요한 일부 웹 애플리케이션에서는 이 클래스를 참고할 수 있습니다.

  1. /*
  2. 이미지 처리 기능 기능: 확대/축소, 잘라내기, 사진 프레임, 워터마크, 선명하게 하기, 회전, 뒤집기, 투명도, 반전
  3. 기록 처리 및 저장 아이디어: 사진이 변경되면 자동으로 새 사진을 생성합니다. 이름 지정 방법은 원본 사진을 기반으로 단계를 추가하는 것을 고려할 수 있습니다. 예: 사진 이름 __ 단계
  4. */
  5. 클래스 사진
  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;//Watermark 이미지
  27. var $FORCE_X=0;//Watermark 가로 좌표
  28. var $FORCE_Y=0;//Watermark 수직 좌표
  29. var $FORCE_START_X=0;//워터마크가 잘린 사진의 가로좌표 좌표
  30. var $FORCE_START_Y=0;//워터마크가 잘린 사진의 세로 좌표
  31. var $PICTURE_TYPE;// Picture type
  32. var $PICTURE_MIME;//출력 헤더
  33. /*
  34. 크기 조정 비율이 1인 경우 크기 조정 높이와 너비에 따라 크기 조정
  35. */
  36. var $ZOOM= 1;//확대 유형
  37. var $ZOOM_MULTIPLE;//확대 비율
  38. var $ZOOM_WIDTH;//확대 너비
  39. var $ZOOM_HEIGHT;//확대 높이
  40. /*
  41. 자르기, 비례 및 고정 길이, 너비
  42. */
  43. var $CUT_TYPE=1;//컷 유형
  44. var $CUT_X=0;//가로 세로 자르기
  45. var $ CUT_Y=0;// 자르기 세로 좌표
  46. var $CUT_;//자르기 너비
  47. var $CUT_HEIGHT=100;//자르기 높이
  48. /*
  49. 선명하게 하기
  50. */
  51. var $SHARP="7.0";//선명도
  52. /*
  53. 투명도 처리
  54. */
  55. var $ALPHA='100 ';//투명도 0-127
  56. var $ALPHA_X="90";
  57. var $ALPHA_Y="50";
  58. /*
  59. 어떤 각도로든 회전
  60. */
  61. var $ CIRCUMROTATE="90.0";//부동 소수점 숫자여야 합니다
  62. /*
  63. 오류 메시지
  64. */
  65. var $ERROR=array(
  66. 'unalviable' =>'관련 사진이 없습니다!'
  67. );
  68. /*
  69. 생성자: 함수 초기화
  70. */
  71. function __construct($PICTURE_URL)
  72. {
  73. $this->get_info($PICTURE_URL);
  74. }
  75. function get_info($PICTURE_URL)
  76. {
  77. /*
  78. 원본 이미지의 정보를 처리하고 먼저 감지합니다. 사진이 존재하는지, 존재하지 않으면 해당 정보가 제공됩니다.
  79. */
  80. @$SIZE=getimagesize($PICTURE_URL);
  81. if(!$SIZE)
  82. {
  83. exit ($this->ERROR['unalviable']);
  84. }
  85. //원본 사진의 유형, 너비, 높이 정보 가져오기
  86. $this-> PICTURE_MIME=$SIZE[' mime'];
  87. $this->PICTURE_;
  88. $this->PICTURE_HEIGHT=$SIZE[1];
  89. //사진 만들기
  90. 스위치 ($SIZE[2] )
  91. {
  92. 사례 1:
  93. $this->PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
  94. $this->PICTURE_TYPE="imagejpeg";
  95. $this->PICTURE_EXT ="jpg";
  96. 중단;
  97. 사례 2:
  98. $this->PICTURE_CREATE=imagecreatefromjpeg($PICTURE_URL);
  99. $this->PICTURE_TYPE="imagegif ";
  100. $ this->PICTURE_EXT="gif";
  101. break;
  102. 사례 3:
  103. $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
  104. $this-> ;PICTURE_TYPE="imagepng" ;
  105. $this->PICTURE_EXT="png";
  106. break;
  107. }
  108. /*
  109. 16진수에서 10진수로 텍스트 색상 변환
  110. * /
  111. preg_match_all("/([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
  112. if(count($MATCHES)==3 )
  113. {
  114. $this->RED=hexdec($MATCHES[0][0]);
  115. $this->GREEN=hexdec($MATCHES[0][1]);
  116. $this->BLUE=hexdec($MATCHES[0][2]);
  117. }
  118. }
  119. #end of __construct
  120. /*
  121. 16 기본 색상을 10진수로 변환(R, G, B)
  122. */
  123. function hex2dec()
  124. {
  125. preg_match_all("/([0-f]){2, 2}/ i",$this->FONT_COLOR,$MATCHES);
  126. if(count($MATCHES)==3)
  127. {
  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. function Zoom_type($ZOOM_TYPE)
  135. {
  136. $this->ZOOM=$ZOOM_TYPE;
  137. }
  138. //사진용 Zoom, 높이와 너비가 지정되지 않은 경우, Zoom
  139. function Zoom()
  140. {
  141. //Zoom size
  142. if($this->ZOOM==0)
  143. {
  144. $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
  145. $this->ZOOM_HEIGHT=$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
  146. }
  147. //새 트루 컬러 이미지 생성
  148. $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT);
  149. $WHITE=imagecolorallocate($this-> TRUE_COLOR ,255,255,255);
  150. imagefilled직사각형($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);
  151. imagecopyreised($this->TRUE_COLOR , $this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  152. }
  153. #확대 끝
  154. //좌표에 따라 또는 자동으로 이미지 자르기
  155. function cut()
  156. {
  157. $this->TRUE_COLOR=imagecreatetruecolor($this-> CUT_WIDTH,$this->CUT_WIDTH);
  158. imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this- >CUT_WIDTH,$this->CUT_HEIGHT);
  159. }
  160. #end of cut
  161. /*
  162. 사진에 텍스트 또는 그림 넣기
  163. 워터마크 텍스트
  164. * /
  165. 함수 _mark_text()
  166. {
  167. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  168. $this->WORD=mb_convert_encoding ($this->FONT_WORD,'utf-8','gb2312');
  169. /*
  170. TrueType 글꼴을 사용하여 텍스트 범위 가져오기
  171. */
  172. $TEMP = imagettfbbox($this ->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
  173. $WORD_LENGTH=strlen($this->WORD);
  174. $WORD_WIDTH =$TEMP[2] - $TEMP[6];
  175. $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
  176. /*
  177. 텍스트 워터마크의 기본 위치는 오른쪽 하단입니다
  178. */
  179. if( $this->WORD_X=="")
  180. {
  181. $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
  182. }
  183. if($this ->WORD_Y ==="")
  184. {
  185. $this->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
  186. }
  187. imagesettile($this->TRUE_COLOR, $this-> PICTURE_CREATE);
  188. imagefilled직사각형($this->TRUE_COLOR,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
  189. $TEXT2=imagecolorallocate($ this->TRUE_COLOR ,$this->RED,$this->GREEN,$this->파랑);
  190. imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this- >ANGLE,$ this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$this->WORD);
  191. }
  192. /*
  193. 워터마크 이미지
  194. */
  195. function _mark_picture()
  196. {
  197. /*
  198. 워터마크 이미지 정보 가져오기
  199. */
  200. @$SIZE=getimagesize($this-> FORCE_URL);
  201. if(!$SIZE)
  202. {
  203. 종료($this->ERROR['unalviable']);
  204. }
  205. $FORCE_PICTURE_;
  206. $FORCE_PICTURE_HEIGHT= $SIZE[1 ];
  207. //워터마크 이미지 생성
  208. switch($SIZE[2])
  209. {
  210. 사례 1:
  211. $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL) ;
  212. $FORCE_PICTURE_TYPE="gif";
  213. 중단;
  214. 사례 2:
  215. $FORCE_PICTURE_CREATE=imagecreatefromjpeg($this->FORCE_URL);
  216. $FORCE_PICTURE_TYPE="jpg";
  217. break;
  218. 사례 3:
  219. $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
  220. $FORCE_PICTURE_TYPE="png";
  221. break;
  222. }
  223. /*
  224. 워터마크의 크기를 결정하고, 대상 이미지의 크기를 생성합니다. 워터마크가 이미지보다 큰 경우 생성되는 이미지의 크기는 워터마크 이미지의 크기입니다. 그렇지 않으면 생성된 이미지의 크기가 원본 이미지 크기가 됩니다.
  225. */
  226. $this->NEW_PICTURE=$this->PICTURE_CREATE;
  227. if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
  228. {
  229. $CREATE_;gt;FORCE_START_X ;
  230. }
  231. else
  232. {
  233. $CREATE_;gt;PICTURE_WIDTH;
  234. }
  235. if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)
  236. {
  237. $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
  238. }
  239. else
  240. {
  241. $CREATE_HEIGHT=$this->PICTURE_HEIGHT;
  242. }
  243. /*
  244. 创建一个画布
  245. */
  246. $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
  247. $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
  248. /*
  249. 将背景图拷贝到画布中
  250. */
  251. imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  252. $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
  253. }
  254. #표시 끝
  255. 함수 alpha_( )
  256. {
  257. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  258. $rgb="#CDCDCD";
  259. $tran_color=" #000000";
  260. for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j )
  261. {
  262. for($i=0;$i<=$this ->PICTURE_WIDTH-1;$i )
  263. {
  264. $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
  265. $r = ($rgb >> 16) & 0xFF;
  266. $g = ($rgb >> 8) & 0xFF;
  267. $b = $rgb & 0xFF;
  268. $now_color=imagecolorallocate($this->PICTURE_CREATE,$ r,$g,$b);
  269. if ($now_color==$tran_color)
  270. {
  271. 계속;
  272. }
  273. else
  274. {
  275. $color=imagecolorallocatealpha( $this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
  276. imagesetpixel($this->PICTURE_CREATE,$ALPHA_X $i,$ALPHA_Y $j,$color);
  277. }
  278. $this->TRUE_COLOR=$this->PICTURE_CREATE;
  279. }
  280. }
  281. }
  282. /*
  283. 图文旋转:
  284. 沿y轴旋转
  285. */
  286. functionturn_y()
  287. {
  288. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  289. for ($x = 0; $x < $this->PICTURE_WIDTH; $x )
  290. {
  291. imagecopy($this->PICTURE_CREATE, $this->PICTURE_WIDTH - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT);
  292. }
  293. }
  294. /*
  295. 沿X轴旋转
  296. */
  297. functionturn_x( )
  298. {
  299. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  300. for ($y = 0; $y < $this->PICTURE_HEIGHT; $y )
  301. {
  302. imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this-> PICTURE_WIDTH, 1);
  303. }
  304. }
  305. /*
  306. 任意角島旋转
  307. */
  308. functionturn()
  309. {
  310. $this-> ;TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  311. imageCopyReised($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this- >PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  312. $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
  313. $this- >TRUE_COLOR=이미지 회전($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
  314. }
  315. /*
  316. 图文锐化
  317. */
  318. function Sharp()
  319. {
  320. $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this-> ;PICTURE_HEIGHT);
  321. $cnt=0;
  322. for ($x=0; $x<$this->PICTURE_WIDTH; $x )
  323. {
  324. for ($y=0; $ y<$this->PICTURE_HEIGHT; $y )
  325. {
  326. $src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1) );
  327. $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
  328. $r = intval($src_clr2["red"] $ this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
  329. $g = intval($src_clr2["green"] $this->SHARP*($src_clr2 ["녹색"]-$src_clr1["녹색"]));
  330. $b = intval($src_clr2["파란색"] $this->SHARP*($src_clr2["파란색"]-$src_clr1[ "파란색"]));
  331. $r = min(255, max($r, 0));
  332. $g = min(255, max($g, 0));
  333. $b = min(255, max($b, 0));
  334. if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g, $b))==-1)
  335. $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);
  336. $cnt ;
  337. if ($DST_CLR==-1) die("$x에서 색상 할당 실패, $y ($cnt).");
  338. imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
  339. }
  340. }
  341. }
  342. /*
  343. 将图piece反color处理??
  344. */
  345. function return_color()
  346. {
  347. /*
  348. 创建一个画布
  349. */
  350. $NEW_PICTURE_CREATE= imageCreate ($ this- & gt; picture_width, $ this- & gt; picture_height); / * * /
  351. imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
  352. $this->TRUE_COLOR=$ NEW_PICTURE_CREATE;
  353. }
  354. /*
  355. 生成目标图文并显示
  356. */
  357. function show()
  358. {
  359. // 判断浏览器,若是IE就不发送头
  360. if(isset($_SERVER['HTTP_USER_AGENT']))
  361. {
  362. $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
  363. if(!preg_match('/ ^.*MSIE.*)$/i',$ua))
  364. {
  365. header("Content-type:$this->PICTURE_MIME");
  366. }
  367. }
  368. $OUT=$this->PICTURE_TYPE;
  369. $OUT($this->TRUE_COLOR);
  370. }
  371. /*
  372. 生成目标图文并保存
  373. */
  374. function save_picture()
  375. {
  376. // 以 JPEG 格式将图동상输出到浏览器或文件
  377. $OUT=$this->PICTURE_TYPE;
  378. if(function_exists($OUT))
  379. {
  380. // 判断浏览器,若是IE就不发送头
  381. if(isset($_SERVER['HTTP_USER_AGENT']))
  382. {
  383. $ua = strtoupper($_SERVER[ 'HTTP_USER_AGENT']);
  384. if(!preg_match('/^.*MSIE.*)$/i',$ua))
  385. {
  386. header("콘텐츠 유형:$this-> ;PICTURE_MIME");
  387. }
  388. }
  389. if(!$this->TRUE_COLOR)
  390. {
  391. exit($this->ERROR['unaviable']);
  392. }
  393. else
  394. {
  395. $OUT($this->TRUE_COLOR,$this->DEST_URL);
  396. $OUT($this->TRUE_COLOR);
  397. }
  398. }
  399. }
  400. /*
  401. 析构函数:释放图文
  402. */
  403. function __destruct()
  404. {
  405. /*释放图文*/
  406. imagedestroy ($this->TRUE_COLOR);
  407. imagedestroy($this->PICTURE_CREATE);
  408. }
  409. #수업 종료
  410. }
  411. ?>
  412. 제제대码

多功能, 图文处리, php
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.