> 백엔드 개발 > PHP 튜토리얼 > PHP에서 이미지를 고정된 크기로 자르는 방법

PHP에서 이미지를 고정된 크기로 자르는 방법

WBOY
풀어 주다: 2016-07-25 09:13:09
원래의
988명이 탐색했습니다.

홈페이지 호출 이미지를 만들려면 홈페이지의 이미지 위치를 대개 디자이너가 지정하기 때문에 고정된 크기의 이미지를 얻어야 하는 경우가 있습니다. 고객이 업로드할 이미지의 비율이 어느 정도인지에 따라 이미지의 비율을 결정할 수 없는 경우가 있습니다. 프런트 엔드 페이지 작성자는 일반적으로 이미지가 넘치지 않도록 img 요소의 높이와 너비를 고정하는 방법을 사용합니다. 그러나 이미지의 비율이 요구되는 비율이 아닌 경우 호출 후 이미지가 변형될 수 있으며 이는 페이지의 아름다움에 큰 영향을 미칩니다. 크기가 조정된 이미지에는 필연적으로 공백이 생기고, 그 공백을 색상으로 채웁니다. 이렇게 하면 이미지가 변형되지는 않지만, 예를 들어 사용자가 다음과 같은 이미지를 보내는 경우 문제가 많이 발생합니다. 키는 매우 크지만 너비는 평균이며, 1:1 이미지로 압축하면 기본적으로 압축 후 이미지가 표시되지 않습니다.

해결책은 이미지를 고정된 크기로 자르는 것입니다. 그러면 이미지가 변형되지 않고, 공백이 늘어나서 채워집니다. bcastr을 사용해 본 친구들은 알아야 합니다. bcastr은 호출 시 이미지가 변형되지 않도록 보장합니다. 고정 크기 출력 이미지 프레임의 경우 소스 이미지에는 다음과 같은 상황이 있습니다. 1: 출력할 이미지의 높이와 너비가 원본 이미지의 높이와 너비보다 작으며 $new_width$src_width && $new_height>$src_width 판단으로 작성됩니다. 3: 1번과 2번 두 가지 유형, 즉 확대하면서 축소하는 상황과 동등하다고 판단하는 상황을 제외한다. 1번과 2번의 경우 함수 처리 코드가 완전히 동일하므로 하나의 처리문으로 요약할 수 있습니다

php 구현 코드

  1. /*
  2. * 설명: 이미지 변형 없이 이미지를 임의의 크기로 자르는 기능입니다
  3. * 매개변수 설명: 처리할 이미지의 파일명 입력, 새 이미지의 저장 파일명 생성, 새 이미지의 너비 생성, 새 이미지의 높이 생성
  4. * writing by smallchicken
  5. * 시간 2008-12-18
  6. */
  7. // 원하는 크기의 이미지 가져오기, 누락된 부분 늘리기, 변형 없음, 공백 없음
  8. function my_image_resize($src_file, $dst_file, $ new_width, $new_height) {
  9. if($ new_width <1 || $new_height <1) {
  10. echo "매개변수 너비 또는 높이 오류 !"
  11. exit()
  12. }
  13. if(!file_exists($src_file)) {
  14. echo $src_file . "이 존재하지 않습니다!"
  15. exit()
  16. }// 이미지 유형
  17. $type= EXIF_imagetype($src_file);
  18. $support_type= array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
  19. if(!in_array($type, $support_type,true)) {
  20. echo "이 유형의 이미지는 jpg, gif 또는 png만 지원합니다.";
  21. exit();
  22. }
  23. //이미지 로드
  24. switch($type) {
  25. case IMAGETYPE_JPEG :
  26. $src_img= imagecreatefromjpeg($src_file);
  27. break;
  28. case IMAGETYPE_PNG:
  29. $src_img=imagecreatefrompng($src_file);
  30. break;
  31. case IMAGETYPE_GIF:
  32. $src_img=imagecreatefromgif );
  33. 기본값:
  34. echo "이미지 로드 오류!"
  35. exit()
  36. $w=imagesx($src_img); h=imagesy($src_img);
  37. $ ratio_w=1.0 * $new_width / $w;
  38. $ratio_h=1.0 * $new_height / $h;
  39. $ratio=1.0; 생성된 이미지의 높이와 너비가 원본보다 작거나 모두 큰 경우 큰 비율로 확대, 큰 비율로 축소하는 것이 원칙입니다(축소 비율은 작아집니다)
  40. ( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
  41. if($ratio_w < $ratio_h) {
  42. $ratio = $ ratio_h ; // 사례 1, 높이 비율 기준에 따라 너비 비율이 높이 비율보다 작습니다. 자르기 또는 확대
  43. }else {
  44. $ratio = $ratio_w }
  45. / / 가로세로 비율이 목표 요구 사항을 정확히 충족하는 중간 임시 이미지를 정의합니다
  46. $inter_w= (int)($new_width / $ratio)
  47. $inter_h=(int) ($new_height / $ratio); >$inter_img=imagecreatetruecolor($inter_w , $inter_h);
  48. imagecopy($inter_img , $src_img, 0,0,0,0,$inter_w,$inter_h)
  49. // 대상 이미지의 크기 및 비율로 최대 측면 길이 $ratio
  50. // 새 이미지 정의
  51. $new_img=imagecreatetruecolor($new_width,$new_height)
  52. imagecopyresampled($new_img,$inter_img, 0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
  53. switch($type) {
  54. case IMAGETYPE_JPEG :
  55. imagejpeg($new_img, $dst_file,100); // 이미지 저장
  56. break;
  57. case IMAGETYPE_PNG :
  58. imagepng($new_img ,$dst_file,100)
  59. break;
  60. case IMAGETYPE_GIF :
  61. imagegif($new_img,$dst_file ,100);
  62. break;
  63. default:
  64. break;
  65. }
  66. } // 1인 경우 종료
  67. // 2 대상 이미지의 한쪽이 원본 이미지보다 큽니다. , 한쪽이 원본 이미지보다 작습니다. 먼저 일반 이미지를 확대한 다음 잘라냅니다.
  68. // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
  69. else{
  70. $ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; / /더 큰 비율로 값을 가져옵니다
  71. // 큰 중간 이미지를 정의합니다. 높이 또는 너비가 대상 이미지와 동일하고 원본 이미지를 확대합니다
  72. $inter_w=(int)($w * $ratio )
  73. $inter_h=(int) ($h * $ratio) ;
  74. $inter_img=imagecreatetruecolor($inter_w , $inter_h);
  75. //크기 조정 후 원본 이미지 자르기
  76. imagecopyresampled ($inter_img,$src_img,0,0,0,0,$inter_w, $inter_h,$w,$h);
  77. // 새 이미지 정의
  78. $new_img=imagecreatetruecolor($new_width,$ new_height)
  79. imagecopy($new_img, $inter_img, 0,0,0 ,0,$new_width,$new_height);
  80. switch($type) {
  81. case IMAGETYPE_JPEG :
  82. imagejpeg($ new_img, $dst_file,100) // 이미지 저장
  83. break; >case IMAGETYPE_PNG :
  84. imagepng($new_img,$dst_file,100);
  85. break
  86. case IMAGETYPE_GIF :
  87. imagegif($new_img,$dst_file,100)
  88. default:
  89. break;
  90. }
  91. }// if3
  92. }// 함수 종료
  93. ? >
  94. 코드 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿