> 백엔드 개발 > PHP 튜토리얼 > PHP 썸네일 및 이미지 워터마크 클래스(이미지 크기 비례 배율)

PHP 썸네일 및 이미지 워터마크 클래스(이미지 크기 비례 배율)

WBOY
풀어 주다: 2016-07-25 08:51:35
원래의
1076명이 탐색했습니다.
  1. /**

  2. *
  3. * 이미지 처리 클래스
  4. * @author FC_LAMP
  5. * @internal 기능 포함: 워터마크, 썸네일
  6. */
  7. 클래스 이미지
  8. {
  9. / /그림 형식
  10. private $exts = 배열('jpg', 'jpeg', 'gif', 'bmp', 'png' );

  11. >*/

  12. public function __construct()
  13. {
  14. if (! function_exists ( 'gd_info' ))
  15. {
  16. throw new Exception ( 'GD 라이브러리를 로드하지 못했습니다!' );
  17. }
  18. }

  19. /**

  20. *
  21. * 자르기 및 압축
  22. * @param $src_img 이미지
  23. * @param $save_img 생성 이미지
  24. * @param $option 매개변수 옵션(다음 포함): $maxwidth width $maxheight height
  25. * array('width'=>xx,'height'=>xxx)
  26. * @internal
  27. * 이미지가 너무 길거나 너무 넓은 경우 생성되는 일반적인 이미지 압축 방법
  28. * 이를 해결하기 위해 먼저 자른 다음 비례적으로 압축하는 방법을 사용합니다
  29. */
  30. 공개 함수 Thumb_img($src_img, $save_img = '', $option)
  31. {

  32. if (비어 있음( $option ['width'] ) 또는 비어 있음( $option ['height'] ))

  33. {
  34. 반환 배열( 'flag' => False, 'msg' => '원본 이미지의 길이와 너비는 0보다 작을 수 없습니다.' );
  35. }
  36. $org_ext = $this->is_img ( $src_img );
  37. if (! $org_ext ['flag'])
  38. {
  39. return $org_ext;
  40. }

  41. 경로, 경로가 올바른지 확인

  42. if (!empty ( $save_img ))
  43. {
  44. $f = $this->check_dir ( $save_img );
  45. if (! $f [ 'flag'])
  46. {
  47. return $f;
  48. }
  49. }

  50. //해당 메소드 가져오기

  51. $org_funcs = $this ->get_img_funcs ( $org_ext ['msg'] );

  52. //원본 크기 가져오기

  53. $source = $org_funcs ['create_func'] ( $src_img ); $dst_scale = $option [ 'height'] / $option ['width']; //대상 이미지 가로 세로 비율
  54. $src_scale = $src_h / $src_w; 비율
  55. if ($src_scale >= $ dst_scale)
  56. { // 너무 높음
  57. $w = intval ( $src_w );
  58. $h = intval ( $dst_scale * $w );< ;/p>
  59. $ x = 0;

  60. $y = ($src_h - $h) / 3;
  61. } else
  62. { // 너무 넓음
  63. $h = intval ( $src_h );
  64. $w = intval ( $h / $dst_scale );

  65. $x = ($src_w - $w) / 2;

  66. $y = 0;
  67. }
  68. // 자르기
  69. $croped = imagecreatetruecolor( $w, $h );
  70. imagecopy( $croped, $source, 0, 0, $x, $y , $src_w, $src_h );
  71. / / Scale
  72. $scale = $option ['너비'] / $w;
  73. $target = imagecreatetruecolor ( $option ['너비'], $option [ 'height'] );
  74. $final_w = intval ( $w * $scale );
  75. $final_h = intval ( $h * $scale );
  76. imagecopyresampled ( $target, $croped, 0, 0 , 0, 0, $final_w, $final_h, $ w, $h );
  77. imagedestroy ( $croped );

  78. //이미지 출력(저장)

  79. if (! 비어 있음( $save_img ))
  80. {

  81. $org_funcs ['save_func'] ( $target, $save_img );

  82. } else
  83. {
  84. 헤더( $org_funcs ['header'] );
  85. $org_funcs ['save_func']( $target );
  86. }
  87. imagedestroy( $target );
  88. 반환 배열('flag' = > True, 'msg' => '' );
  89. }

  90. /**

  91. *
  92. * 확대된 이미지
  93. * @param $src_img 원본 이미지
  94. * @param $save_img 저장 위치
  95. * @param $option 매개변수 설정 array('width'= >xx ,'키'=>xxx)
  96. *
  97. */
  98. 함수 resize_image($src_img, $save_img = '', $option)
  99. {
  100. $org_ext = $this->is_img ( $src_img );
  101. if (! $org_ext ['flag'])
  102. {
  103. return $ org_ext;
  104. }

  105. //저장 경로가 있으면 경로가 맞는지 확인

  106. if (!empty ( $save_img ))
  107. {
  108. $f = $this->check_dir ( $save_img ) ;
  109. if (! $f ['flag'])
  110. {
  111. return $f;
  112. }
  113. }< ;/p>
  114. //해당 메소드 꺼내기

  115. $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );

  116. $source = $org_funcs ['create_func'] ( $src_img );
  117. $src_w = Imagesx ( $source );
  118. $src_h = Imagesy ( $source );< ;/p>
  119. if (($ 옵션 ['너비'] && $src_w > $option ['너비']) || ($옵션 ['높이'] && $src_h > $ 옵션 ['높이']))

  120. {
  121. if ($option ['너비'] && $src_w > $option ['너비'])
  122. {
  123. $widthratio = $option [ '너비'] / $src_w;
  124. $resizewidth_tag = true ;
  125. }

  126. if ($option ['height'] && $src_h > $option [' height'])

  127. {
  128. $heightratio = $ option ['height'] / $src_h;
  129. $resizeheight_tag = true;
  130. }

  131. ($resizewidth_tag && $resizeheight_tag)

  132. {
  133. if ($widthratio < $heightratio)
  134. $ratio = $widthratio;
  135. else
  136. $ratio = $heightratio;
  137. }
  138. if ($resizewidth_tag && ! $resizeheight_tag)

  139. $ratio = $widthratio;
  140. if ($resizeheight_tag && ! $resizewidth_tag)
  141. $ratio = $heightratio;

  142. $newheight = $src_h * $ratio;

  143. if (function_exists ( "imagecopyresampled" ))

  144. {
  145. $newim = imagecreatetruecolor ( $newwidth, $newheight );
  146. imagecopyresampled ( $newim, $source, 0, 0, 0, 0, $newwidth, $newheight, $src_w, $src_h );
  147. } else
  148. {
  149. $newim = imagecreate( $newwidth, $newheight );
  150. imagecopyreized( $newim, $source, 0, 0, 0 , 0, $newwidth, $newheight, $src_w, $src_h );
  151. }
  152. }
  153. //输출(保存)图文
  154. if (!empty ( $save_img ))
  155. {
  156. $org_funcs ['save_func'] ( $newim, $save_img );

  157. } else
  158. {
  159. 헤더( $org_funcs ['header'] );
  160. $org_funcs ['save_func'] ( $ newim );
  161. }
  162. imagedestroy ( $newim );
  163. 반환 배열 ('flag' => True, 'msg' => '' );
  164. }

  165. /**

  166. *
  167. * 워터마크 이미지 생성
  168. * @param $org_img 원본 이미지
  169. * @param $mark_img 워터마크 이미지
  170. * @param $save_img 디렉토리가 존재하지 않으면 Create를 시도합니다. 디렉토리
  171. * @param array $option 워터마크에 대한 기본 설정은 다음과 같습니다.
  172. * x: 워터마크의 가로 위치, 기본값은 워터마크 이미지의 너비를 뺀 값입니다.
  173. * y: 워터마크의 세로 위치, 기본값은 워터마크의 높이를 뺀 값
  174. * alpha: 알파 값(투명도 조절), 기본값은 50
  175. */
  176. 공용 함수 water_mark($org_img, $mark_img, $save_img = '', $option = array())
  177. {
  178. //检查图文
  179. $org_ext = $this->is_img ( $org_img );
  180. if (! $org_ext ['flag'])
  181. {
  182. return $org_ext;
  183. }
  184. $mark_ext = $this- >is_img ( $mark_img );
  185. if (! $mark_ext ['flag'])
  186. {
  187. return $mark_ext;
  188. }
  189. //如果有保存路径,则确定路径是否正确
  190. if (!empty ( $save_img ))
  191. {
  192. $f = $this->check_dir ( $save_img );
  193. if (! $f ['flag'])
  194. {
  195. return $f;
  196. }
  197. }

  198. //获取상应画布

  199. $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
  200. $org_img_im = $org_funcs ['create_func'] ( $org_img );

  201. $mark_funcs = $this->get_img_funcs ( $mark_ext ['msg'] );

  202. $mark_img_im = $mark_funcs ['create_func'] ( $mark_img );

  203. //拷贝水印图文坐标

  204. $mark_img_im_x = 0;
  205. $mark_img_im_y = 0;
  206. //拷贝水印图文高宽
  207. $mark_img_w = ​​Imagesx ( $mark_img_im );
  208. $mark_img_ h = 이미지 ( $mark_img_im );

  209. $org_img_w = ​​이미지x( $org_img_im );

  210. $org_img_h = 이미지x( $org_img_im );

  211. //합성생성点坐标

  212. $x = $org_img_w - $mark_img_w;
  213. $org_img_im_x = isset ( $option ['x'] ) ? $option ['x'] : $x;
  214. $org_img_im_x = ($org_img_im_x > $org_img_w 또는 $org_img_im_x < 0) ? $x : $org_img_im_x;
  215. $y = $org_img_h - $mark_img_h;
  216. $org_img_im_y = isset ( $option ['y'] ) ? $option ['y'] : $y;
  217. $org_img_im_y = ($org_img_im_y > $org_img_h 또는 $org_img_im_y < 0) ? $y : $org_img_im_y;

  218. //alpha

  219. $alpha = isset ( $option ['alpha'] ) ? $option ['alpha'] : 50;
  220. $alpha = ($alpha > 100 또는 $alpha < 0) ? 50 : $alpha;

  221. //합쳐그림

  222. imagecopymerge ( $org_img_im, $mark_img_im, $org_img_im_x, $org_img_im_y, $mark_img_im_x, $mark_img_im_y, $mark_img_w, $mark_img_h, $alpha );

  223. //출(保存)图文

  224. if (!empty ( $save_img ))
  225. {

  226. $org_funcs ['save_func'] ( $org_img_im, $save_img );

  227. } else
  228. {
  229. 헤더( $org_funcs ['header'] );
  230. $org_funcs ['save_func'] ( $ org_img_im );
  231. }
  232. //销毁画布
  233. imagedestroy ( $org_img_im );
  234. imagedestroy ( $mark_img_im );
  235. 반환 배열 ('flag' => True, 'msg' = > '' );

  236. }

  237. /**

  238. *
  239. * 이미지 확인
  240. * @paramknown_type $img_path
  241. * @return array('flag'=>true/false,'msg'=>ext/error message)
  242. */
  243. 비공개 함수 is_img($img_path)
  244. {
  245. if (!file_exists ( $img_path ))
  246. {
  247. return array ('flag' => False, 'msg' => "加载图文 $img_path 失败!" );
  248. }
  249. $ext = 폭발( '.', $img_path );
  250. $ext = strtolower( end( $ext ) );
  251. if (! in_array ( $ext, $this->exts ))
  252. {
  253. return array ('flag' => False, 'msg' => "图文 $img_path格式不正确!" );
  254. }
  255. 반환 배열 ('flag' => True, 'msg' => $ext );
  256. }

  257. /**

  258. *
  259. * 올바른 이미지 함수를 반환합니다
  260. * @paramknown_type $ext
  261. */
  262. 비공개 함수 get_img_funcs($ext)
  263. {
  264. //选择
  265. 스위치($ext)
  266. {
  267. 케이스 'jpg' :
  268. $header = 'Content-Type:image/jpeg';
  269. $createfunc = 'imagecreatefromjpeg';
  270. $savefunc = 'imagejpeg';
  271. break;
  272. case 'jpeg' :
  273. $header = 'Content-Type:image/jpeg';
  274. $createfunc = 'imagecreatefromjpeg';
  275. $savefunc = 'imagejpeg';
  276. break;
  277. case 'gif' :
  278. $header = ' Content-Type:image/gif';
  279. $createfunc = 'imagecreatefromgif';
  280. $savefunc = 'imagegif';
  281. break;
  282. case 'bmp' :
  283. $header = '콘텐츠 -Type:image/bmp';
  284. $createfunc = 'imagecreatefrombmp';
  285. $savefunc = 'imagebmp';
  286. break;
  287. 기본값:
  288. $header = 'Content-Type:image /png';
  289. $createfunc = 'imagecreatefrompng';
  290. $savefunc = 'imagepng';
  291. }
  292. 반환 배열('save_func' => $savefunc, 'create_func' => $ createfunc, '헤더' => $header );
  293. }

  294. /**

  295. *
  296. * 디렉터리를 확인하고 생성해 보세요.
  297. * @param $save_img
  298. */
  299. 비공개 함수 check_dir($save_img)
  300. {
  301. $dir = dirname ( $save_img );
  302. if (!is_dir ( $dir ))
  303. {
  304. if (! mkdir ( $dir, 0777, true ))
  305. {
  306. return array ('flag' => False, 'msg' => "图文保存目录 $dir 无法创建!" );
  307. }
  308. }
  309. 반환 배열 ('flag' => True, 'msg' => '' );
  310. }
  311. }

  312. if (!empty ( $_FILES ['test'] ['tmp_name'] ))

  313. {
  314. //例子
  315. $img = new Img ();
  316. //원图
  317. $name = 폭발( '.', $_FILES ['test'] ['name'] );
  318. $org_img = 'D:/test.' . end ( $name );
  319. move_uploaded_file ( $_FILES ['test'] ['tmp_name'], $org_img );
  320. $option = array ('width' => $_POST ['width'], '높이' => $_POST ['높이'] );
  321. if ($_POST ['type'] == 1)
  322. {
  323. $s = $img->resize_image ( $org_img , '', $option );
  324. } else
  325. {
  326. $img->thumb_img( $org_img, '', $option );
  327. }
  328. 연결 해제( $org_img );
  329. }

复代码

使用方式: PHP수납

  1. $img = 새 이미지();
  2. $org_img = 'D:/tt.png';
  3. $mark_img = 'D: /t.png';
  4. //保存waterimg为空时,将会直接输ude图文)
  5. $save_img = 'D:/test99h/testone/sss.png';
  6. //水印设置调节
  7. $option = array ('x' => 50, 'y' => 50, 'alpha' => 80 );
  8. //生成水印图文
  9. $ 플래그 = $img->water_mark ( $org_img, $mark_img, $save_img, $option );
复代码

当调节 $option 参数时,会유상应变화:

  1. //例子

  2. $img = 새 Img();
  3. $org_img = 'D:/tt .png';
  4. //压缩图 Pictures(100*100)
  5. $option = array ('너비' => 100, '높이' => 100 );

  6. < ;p>//$save_img为空时,将会直接输出图image到浏览器

  7. $save_img = 'D:/test99h/testone/sss_thumb.png';

  8. $flag = $img->thumb_img ( $org_img, $save_img, $option );
复主代码

调节$옵션의 큰 크기:

  1. $img = new Img ();
  2. //hara图
  3. $org_img = 'D:/tt.png';
  4. //水印标记图
  5. $mark_img = 'D:/t.png';
  6. //保存水印图文
  7. $save_img = 'D:/test99h/testone/sss.png';
  8. //水印设置调节
  9. $option = array ('x' => 50, 'y' => 50, 'alpha' => 60 );
  10. //生成印图文
  11. $flag = $img->water_mark ( $org_img, $mark_img, $save_img, $option );
  12. //压缩水印图文
  13. $option = 배열 ​​('너비' => 200, '높이' => 200 );
  14. //保存压缩图
  15. $save_img2 = 'D:/test99h/testone/sss2_thumb.png';
  16. $flag = $img->thumb_img ( $save_img, $ save_img2, $option ); //等比例压缩类似
复代码

지금图image,수印图상一致。 不然,会出现一些未知错误。



원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿